То, как знать в коде C#, которые вводят переменную, было объявлено с

следующее дало бы Вам новые строки. Это также произвело бы дополнительные пространства впереди, хотя... необходимо будет испортить исходное добавление отступа путем удаления переключения вкладок.

form { white-space: pre }
7
задан Misha 23 November 2009 в 23:18
поделиться

3 ответа

См. Пример кода ниже. Ключ заключается в использовании 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);
    }
}

также дает правильные результаты.

15
ответ дан 6 December 2019 в 08:43
поделиться

Просто повторяйте GetType (), пока не нажмете на объект.

По сути, вы позволяете обобщенному выводу типа компилятора делать вывод о рассматриваемом типе, но это означает, что используемая переменная , а не всегда является переменной, которую вы видите. Вместо этого это может быть переменная, синтезированная компилятором, например:

string x = "x";
Console.WriteLine(x.GetDeclaredType()); // string
Console.WriteLine(((object)x).GetDeclaredType()); // object

Поскольку компилятор синтезирует временную переменную, в которую помещается объектная ссылка на x.

4
ответ дан 6 December 2019 в 08:43
поделиться

Просто повторяйте GetType (), пока не дойдете до объекта.

2
ответ дан 6 December 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: