聪明的方法找到相应的可空类型?

时间:2009-12-16 10:55:24

标签: c# reflection types nullable

我怎样才能避免使用这个字典(或动态创建它)?

Dictionary<Type,Type> CorrespondingNullableType = new Dictionary<Type, Type>
{
    { typeof(bool),    typeof(bool?) },
    { typeof(byte),    typeof(byte?) },
    { typeof(sbyte),   typeof(sbyte?) },
    { typeof(char),    typeof(char?) },
    { typeof(decimal), typeof(decimal?) },
    { typeof(double),  typeof(double?) },
    { typeof(float),   typeof(float?) },
    { typeof(int),     typeof(int?) },
    { typeof(uint),    typeof(uint?) },
    { typeof(long),    typeof(long?) },
    { typeof(ulong),   typeof(ulong?) },
    { typeof(short),   typeof(short?) },
    { typeof(ushort),  typeof(ushort?) },
    { typeof(Guid),    typeof(Guid?) },
};

3 个答案:

答案 0 :(得分:5)

你想做类似的事情:

Type structType = typeof(int);    // or whatever type you need
Type nullableType = typeof(Nullable<>).MakeGenericType(structType);

获取给定T的相应Nullable<T>(在此示例中为int

答案 1 :(得分:2)

type?只是Nullable<type>

的语法糖

知道这一点,你就可以做这样的事情:

public Type GetNullableType(Type t) => typeof(Nullable<>).MakeGenericType(t);

答案 2 :(得分:2)

使用简单的泛型方法:

public Type GetNullable<T>() where T : struct
{
  return typeof(Nullable<T>);
}

这应该返回您传入的任何类型的可空类型。