在.Net typeof(DateTime?).Name
中使用反射返回「Nullable`1」。typeof(DateTime?)。Name == Nullable`1
有什麼方法可以將實際類型返回爲字符串。 (在這種情況下「DateTime」或「System.DateTime」)
我知道DateTime?
是Nullable<DateTime>
。除此之外,我只是在尋找可空類型的類型。
在.Net typeof(DateTime?).Name
中使用反射返回「Nullable`1」。typeof(DateTime?)。Name == Nullable`1
有什麼方法可以將實際類型返回爲字符串。 (在這種情況下「DateTime」或「System.DateTime」)
我知道DateTime?
是Nullable<DateTime>
。除此之外,我只是在尋找可空類型的類型。
有一個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;
}
這是一個方法的可怕的名字,但我沒有足夠的智慧想出一個(我會很高興,如果有人提出一個更好的去改變它!)
然後作爲擴展方法,您的使用情況可能是這樣的:
public static string GetTypeName(this Type type)
{
return type.GetNullableUnderlyingTypeOrTypeIfNonNullable().Name;
}
或
typeof(DateTime?).GetNullableUnderlyingTypeOrTypeIfNonNullable().Name
'公共靜態字符串GetTypeName(這種類型)'擴展方法! –
正如Patryk指出:
typeof(DateTime?).GetGenericArguments()[0].Name
與此唯一的問題是,如果在實踐中,它是一種通用的方法來獲取類型,這也將拉出類似「列表
@ChrisSinclair只需添加一個檢查來查看類型本身是否爲'Nullable'並拋出異常,如果這是您需要的行爲。 – Servy
@Servy:哦,當然。我只是想向乍得提出這方面的一個注意事項,因爲我們不一定知道他的預期用法的全部範圍;不想讓他在以後的道路上感到驚訝。 –
克里斯·辛克萊代碼的作品,但我重寫了它更加簡潔。
public static Type GetNullableUnderlyingTypeIfNullable(Type possiblyNullableType)
{
return Nullable.GetUnderlyingType(possiblyNullableType) ?? possiblyNullableType;
}
,然後使用它:
GetNullableUnderlyingTypeIfNullable(typeof(DateTime?)).Name
的實際類型是可空'' –
StuartLC
取出問號。 –
請記住,這是一個很好的測試,刪除代碼中的問號可能會破壞某些東西。 – James