我想寫一個方法將給定的對象轉換爲給定類型的實例。我開始與此:C#幫我一些泛型鑄造迷人
private static T TryCast<T>(object o)
{
return (T) o;
}
進去,我知道那是不會工作,但它說明了這一概念。現在,當我有不會自動投射的類型時,我會開始遇到問題,如字符串 - > DateTime。我試圖使用Convert類來處理這些情況,但我只是得到一個編譯時錯誤而不是運行時錯誤。以下代碼獲取編譯錯誤「無法投型‘字符串’的表達式類型‘T’
private static T TryCast<T>(object o)
{
var typeName = typeof (T).FullName;
switch (typeName)
{
case "System.String":
return (T) Convert.ToString(o);
default:
return (T) o;
}
}
我也知道Convert.ChangeType()的,但我不知道它是否會在處理邊緣我會以其他方式處理在上述開關,就像規定字符串的情況下 - >日期時間,我會通常只使用Convert.ToDateTime爲
private static T TryCast<T>(object o)
{
return (T)Convert.ChangeType(o, typeof(T));
}
那麼,什麼是我最好的選擇。如果有人可以給?我一個可行的方法,我可以從那裏拿。
好的,爲了給出一個上下文,此方法的直接用法是從DataRow對象的列值中動態分配類型爲T的實例的屬性。我會傳入Dictionary其中Key =實例上的屬性名稱,以及Value = DatRow上的列名稱。我已經寫了反射來從類型中獲取PropertyInfos並設置實例值。這個鑄造位是我最後一塊拼圖。我希望它儘可能重複使用,但是如果將範圍限制在我的示例中使其更容易,那就這樣做吧。 –
2012-03-01 16:15:17
我知道上面的第二個例子應該生成編譯器錯誤,以及爲什麼。我只是用它來說明方法,謝謝。不是新的:<) – 2012-03-01 16:26:09