在 .Net 中使用反射typeof(DateTime?).Name
返回“可空`1”。
有什么方法可以将实际类型作为字符串返回。 (在本例中为“DateTime”或“System.DateTime”)
我明白那个DateTime?
is Nullable<DateTime>
。这不是重点,我只是在寻找可空类型的类型。
有一个Nullable.GetUnderlyingType http://msdn.microsoft.com/en-us/library/system.nullable.getunderlyingtype%28v=vs.110%29.aspx在这种情况下可以帮助您的方法。您最终可能会想要创建自己的实用程序方法,因为(我假设)您将同时使用可空类型和不可空类型:
public static string GetTypeName(Type type)
{
var nullableType = Nullable.GetUnderlyingType(type);
bool isNullableType = nullableType != null;
if (isNullableType)
return nullableType.Name;
else
return type.Name;
}
Usage:
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;
}
那是一个terrible一种方法的名称,但我不够聪明,无法想出一个方法(如果有人提出更好的方法,我很乐意更改它!)
那么作为扩展方法,您的用法可能如下:
public static string GetTypeName(this Type type)
{
return type.GetNullableUnderlyingTypeOrTypeIfNonNullable().Name;
}
or
typeof(DateTime?).GetNullableUnderlyingTypeOrTypeIfNonNullable().Name
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)