Per @ Iridium的評論,我最終改變爲一個Try模式,並返回一個布爾作爲成功標誌,而不是拋出一個InvalidCastException。看起來很像是:
if (!property.CanAssignValue(valueToSet))
{
Debug.Write(string.Format("The given value {0} could not be assigned to property {1}.", value, property.Name));
return false;
}
property.SetValue(instance, valueToSet, null);
return true;
的 「CanAssignValue」 成爲三個快速擴展:
public static bool CanAssignValue(this PropertyInfo p, object value)
{
return value == null ? p.IsNullable() : p.PropertyType.IsInstanceOfType(value);
}
public static bool IsNullable(this PropertyInfo p)
{
return p.PropertyType.IsNullable();
}
public static bool IsNullable(this Type t)
{
return !t.IsValueType || Nullable.GetUnderlyingType(t) != null;
}
謝謝!
右鍵單擊輸出窗口並取消選中「異常消息」。這就是你所要求的,但沒有達到你所希望的。只有'as'操作員纔會這樣做。 –
看來這裏的問題是比控制檯輸出速度更多的異常數量。無效的轉換異常可以通過在轉換之前檢查類型來防止。我真的很想知道爲什麼這是「通過設計」,並且你不是在試圖投射物體之前檢查類型的原因。 – Iridium
@銥 - 感謝您的評論。你讓我思考,我只是使用與TryParse相同的模式,但與TryCast結束。我將在答案中發佈相關代碼。 –