Я действительно не знаю, что добавить к названию, я хотел бы получить Тип (T) Nullable.Например, я получил объект, тип которого равен Nullable, и я хотел бы получить что-то вроде «System.Int32» (тип, конечно, не строка)
Попробуйте это: Nullable.GetUnderylingType (myType)
К вашему сведению: myType должен иметь тип
Этот метод должен сработать:
Type GetValueType(Type t) { return t.GetGenericArguments().First(); }
Используйте 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 () вернет базовый тип.
Предупреждение: ужасный код, без проверок, просто пример и т. Д .:
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); } }
System.Nullable.GetUnderlyingType(typeof(Nullable<int>));
Nullable - это универсальная конструкция, поэтому вы должны получить ее из GenericArguments типа: typeof(T).GetGenericArguments()[0]
typeof(T).GetGenericArguments()[0]