2011-04-08 77 views
0

我在C#(.NET 4.0)中爲我的應用程序做了這個方法。 此方法將您作爲參數傳遞給的對象轉換爲類型T.我想分享它並詢問是否有更好的解決方案。以對象作爲參數的方法,它返回我想要的類型C#

public static T ReturnMeThis<T>(object variable) { 
      T dataOut = default(T); 
      try { 
       if(Convert.IsDBNull(variable) && typeof(T) == typeof(String)) 
        dataOut = (T)(object)""; 
       else if(!Convert.IsDBNull(variable)) 
        dataOut = (T)Convert.ChangeType(variable, typeof(T)); 
       return dataOut; 
      } 
      catch(InvalidCastException castEx) { 
       System.Diagnostics.Debug.WriteLine("Invalid cast in ReturnMeThis<" + typeof(T).Name + ">(" + variable.GetType().Name + "): " + castEx.Message); 
       return dataOut; 
      } 
      catch(Exception ex) { 
       System.Diagnostics.Debug.WriteLine("Error in ReturnMeThis<" + typeof(T).Name + ">(" + variable.GetType().Name + "): " + ex.Message); 
       return dataOut; 
      } 
     } 

回答

0

Just cast the object?

TypeIWant t = variable as TypeIWant; 

if(t != null) 
{ 
// Use t 
} 

我錯過了什麼嗎?

0

正如tomasmcguinness所說,as關鍵字可以正常工作。它會在無效轉換時返回null,而不會拋出錯誤。如果你想有一個記錄無效轉換的專用方法,你可以這樣做:

public static T ReturnMeThis<T>(object variable) where T : class 
{ 
    T dataOut = variable as T; 
    if (dataOut == null) 
     System.Diagnostics.Debug.WriteLine(String.Format("Cannot cast {0} as a {1}", variable.GetType().Name, dataOut.GetType().Name)); 

    return dataOut; 
} 
+0

事情是我所做的方法不能返回null。 – 2011-04-10 04:09:40

相關問題