Есть код 1
int i = 123;
string s = $"{i}";
И есть код 2
int i = 123;
string s = $"{i.ToString()}";
В первом варианте будет происходить боксинг или с интерполяцией не происходит такого и компилятор понимает что надо вызвать ToString
?
1)
string s = $"{i}";
превращается в string.format, который принимает object'ы, боксинг присутствует
2)
string s = $"{i.ToString()}";
передается строка, боксить нечего
В первом варианте будет происходить боксинг
Да.
с интерполяцией не происходит такого и компилятор понимает что надо вызвать ToString
?
Ваше утверждение "надо вызвать ToString
" не является корректным, так как "надо" вызвать вовсе не тот ToString
, который вызываете Вы.
using System;
class Test {
struct S: IFormattable {
public override string ToString() => "Object.ToString";
public string ToString(string format, IFormatProvider formatProvider) => "IFormattable.ToString";
}
public static void Main()
{
S s = new S();
Console.WriteLine($"{s}");
Console.WriteLine($"{s.ToString()}");
}
}
https://ideone.com/gRz74U
Так как поведение String.Format
не является частью стандарта языка C#, то компилятор не имеет права выполнять, предложенную Вами, оптимизацию, так как он не может знать какой именно ToString
нужно вызвать и с какими параметрами.
Более того, если определение типа S
находится в другой сборке, то на этапе компиляции компилятор даже не будет иметь достаточного количества информации, чтобы определить, какой метод вызвать.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Проблема такова: я создаю файл в папке dropbox, он сразу начинает обрабатываться и появляется ситуация, что файл используется процессом dropboxЕсть...
Допустим есть БД для хранения постовПост, как сущность в приложении может представлять из себя примерно следующий класс:
Как определить границу sqlReader[r] чтобы не вылетать за пределы массива
Не совсем понимаю некоторые вещи в веб технологиях