Не нужно угадывать ...
Когда вы делаете someValueOrObject + string
, а someValueOrObject неявно не преобразуется в строку, тогда ToString () метод будет вызываться на someValueOrObject , чтобы получить его строковое представление (эквивалентное someValueOrObject.ToString() + string
).
ToString()
- это виртуальный метод, реализованный System.Object
класс (из которого происходит любой другой тип в .NET, исключения несмотря на ).Если не переопределено, его поведение по умолчанию - возвращать (полностью определенное) имя типа экземпляра, для которого он вызывается.
Чтобы лучше это понять, вы можете запустить этот пример:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var l = List();
Console.WriteLine("Type of enumerable returned by List(): " + l.GetType().FullName);
Console.WriteLine(l + "wtf");
}
public static IEnumerable<string> List() {
yield return "abc";
yield return "xyz";
}
}
(https://dotnetfiddle.net/H0hl4O)
Предполагая, что имя типа сгенерированного компилятором объекта, возвращаемого методом итератора List () is " Program + d__0", в этом примере будет получен следующий вывод:
Тип перечислимого, возвращаемого List (): Программа + d__0
Программа + d__0wtf