在.Net typeof(DateTime?).Name
中使用反射返回“Nullable`1”。
有没有办法将实际类型作为字符串返回。 (在本例中为“DateTime”或“System.DateTime”)
我了解DateTime?
是Nullable<DateTime>
。除此之外,我只是在寻找可空类型的类型。
答案 0 :(得分:13)
在这种情况下,有Nullable.GetUnderlyingType
方法可以帮助您。可能你最终想要制作自己的实用工具方法,因为(我假设)你将使用可空和非可空类型:
public static string GetTypeName(Type type)
{
var nullableType = Nullable.GetUnderlyingType(type);
bool isNullableType = nullableType != null;
if (isNullableType)
return nullableType.Name;
else
return type.Name;
}
用法:
Console.WriteLine(GetTypeName(typeof(DateTime?))); //outputs "DateTime"
Console.WriteLine(GetTypeName(typeof(DateTime))); //outputs "DateTime"
public static Type GetNullableUnderlyingTypeOrTypeIfNonNullable(this Type possiblyNullableType)
{
var nullableType = Nullable.GetUnderlyingType(possiblyNullableType);
bool isNullableType = nullableType != null;
if (isNullableType)
return nullableType;
else
return possiblyNullableType;
}
这是一个方法的可怕的名称,但我不够聪明,想出一个(如果有人建议更好的话,我会很乐意改变它!)< / p>
然后作为扩展方法,您的用法可能如下:
public static string GetTypeName(this Type type)
{
return type.GetNullableUnderlyingTypeOrTypeIfNonNullable().Name;
}
或
typeof(DateTime?).GetNullableUnderlyingTypeOrTypeIfNonNullable().Name
答案 1 :(得分:5)
Patryk指出:
typeof(DateTime?).GetGenericArguments()[0].Name
答案 2 :(得分:4)
Chris Sinclair 代码有效,但我更简洁地重写了它。
public static Type GetNullableUnderlyingTypeIfNullable(Type possiblyNullableType)
{
return Nullable.GetUnderlyingType(possiblyNullableType) ?? possiblyNullableType;
}
然后使用它:
GetNullableUnderlyingTypeIfNullable(typeof(DateTime?)).Name