Получить тип (T) Nullable <T>во время выполнения? - PullRequest
7 голосов
/ 29 ноября 2011

Я действительно не знаю, что добавить к названию, я хотел бы получить Тип (T) Nullable.Например, я получил объект, тип которого равен Nullable, и я хотел бы получить что-то вроде «System.Int32» (тип, конечно, не строка)

Ответы [ 6 ]

12 голосов
/ 29 ноября 2011

Попробуйте это: Nullable.GetUnderylingType (myType)

К вашему сведению: myType должен иметь тип

2 голосов
/ 29 ноября 2011

Этот метод должен сработать:

Type GetValueType(Type t)
{
   return t.GetGenericArguments().First();
}
1 голос
/ 29 ноября 2011

Используйте GetType (), он работает как (не) ожидаемый.

if (typeof(int?) == typeof(int))
    MessageBox.Show("It works with definitions");
if (new Nullable<int>(2).GetType() == typeof(int))
    MessageBox.Show("It works with instances!");

Этот пример кода покажет последнее окно сообщения.GetType () вернет базовый тип.

0 голосов
/ 29 ноября 2011

Предупреждение: ужасный код, без проверок, просто пример и т. Д .:

using System;

static class Program {

    public static void Main(params string[] args) {
        Type t = typeof(int?);
        Type genericArgument = t.GetGenericArguments()[0];
        Console.WriteLine(genericArgument.FullName);
    }
}
0 голосов
/ 29 ноября 2011
System.Nullable.GetUnderlyingType(typeof(Nullable<int>));
0 голосов
/ 29 ноября 2011

Nullable - это универсальная конструкция, поэтому вы должны получить ее из GenericArguments типа: typeof(T).GetGenericArguments()[0]

...