我決定做一個混合物這裏有幾個解決方案。
首先,由於結構等問題,我決定保留Leri提到的允許類型列表。第二,根據Luaan的評論,我寫了一個處理空白的方法。
所以溶液如下:
的代碼爲通過屬性
foreach (PropertyInfo property in properties)
{
if (this.IsTypeASimpleType(property.PropertyType) &&
property.CanWrite)
{
}
}
迭代然後用於檢查代碼,如果類型是正確的
private bool IsTypeASimpleType(Type typeToCheck)
{
var typeCode = Type.GetTypeCode(this.GetUnderlyingType(typeToCheck));
switch (typeCode)
{
case TypeCode.Boolean:
case TypeCode.Byte:
case TypeCode.Char:
case TypeCode.DateTime:
case TypeCode.Decimal:
case TypeCode.Double:
case TypeCode.Int16:
case TypeCode.Int32:
case TypeCode.Int64:
case TypeCode.SByte:
case TypeCode.Single:
case TypeCode.String:
case TypeCode.UInt16:
case TypeCode.UInt32:
case TypeCode.UInt64:
return true;
default:
return false;
}
}
和代碼,以處理空白
private Type GetUnderlyingType(Type typeToCheck)
{
if (typeToCheck.IsGenericType &&
typeToCheck.GetGenericTypeDefinition() == typeof(Nullable<>))
{
return Nullable.GetUnderlyingType(typeToCheck);
}
else
{
return typeToCheck;
}
}
現在,switch語句可能已被更改爲允許的類型列表,但最終的遊戲將是相同的。
爲什麼你想要它?聽起來像你正在做一些映射..添加更大的上下文將讓我們給出更準確的答案。 – Leri
這不是重複的。我知道如何獲得屬性,但我不知道根據我的問題獲取指定屬性的好方法。 Leri - 我在底部更新了我的問題 – eyeballpaul
[檢查對象是否爲非基類型]可能的重複(http://stackoverflow.com/questions/13128028/check-if-an-object-is-non-鹼基類型) – Servy