следующее дало бы Вам новые строки. Это также произвело бы дополнительные пространства впереди, хотя... необходимо будет испортить исходное добавление отступа путем удаления переключения вкладок.
form { white-space: pre }
См. Пример кода ниже. Ключ заключается в использовании Generics , метод расширения использовался только для хорошего синтаксиса.
using System;
static class Program
{
public static Type GetDeclaredType<T>(this T obj)
{
return typeof(T);
}
// Demonstrate how GetDeclaredType works
static void Main(string[] args)
{
ICollection iCollection = new List<string>();
IEnumerable iEnumerable = new List<string>();
IList<string> iList = new List<string>();
List<string> list = null;
Type[] types = new Type[]{
iCollection.GetDeclaredType(),
iEnumerable.GetDeclaredType(),
iList.GetDeclaredType(),
list.GetDeclaredType()
};
foreach (Type t in types)
Console.WriteLine(t.Name);
}
}
Результат:
ICollection
IEnumerable
IList`1
List`1
EDIT: Вы также можете не использовать здесь метод расширения, так как он будет отображаться в каждом раскрывающемся списке IntelliSense. См. Другой пример:
using System;
using System.Collections;
static class Program
{
public static Type GetDeclaredType<T>(T obj)
{
return typeof(T);
}
static void Main(string[] args)
{
ICollection iCollection = new List<string>();
IEnumerable iEnumerable = new List<string>();
Type[] types = new Type[]{
GetDeclaredType(iCollection),
GetDeclaredType(iEnumerable)
};
foreach (Type t in types)
Console.WriteLine(t.Name);
}
}
также дает правильные результаты.
Просто повторяйте GetType (), пока не нажмете на объект.
По сути, вы позволяете обобщенному выводу типа компилятора делать вывод о рассматриваемом типе, но это означает, что используемая переменная , а не всегда является переменной, которую вы видите. Вместо этого это может быть переменная, синтезированная компилятором, например:string x = "x";
Console.WriteLine(x.GetDeclaredType()); // string
Console.WriteLine(((object)x).GetDeclaredType()); // object
Поскольку компилятор синтезирует временную переменную, в которую помещается объектная ссылка на x.
Просто повторяйте GetType (), пока не дойдете до объекта.