2012-11-08 145 views
0

我有做一些類型轉換的方法。如果類型與傳遞的泛型類型相同,我不想完成整個過程。這是一個片段。檢查對象等通用類型

public static T ConvertTo<T>(this object @this) 
    { 
     if (typeof(T) == @this.GetType()) 
      return (T)@this; 
    } 

我檢查是對象@this已經是這似乎工作類型T,但是這是這樣做的最佳方式?

+1

要使用*確切*類型,而不是'is'任何理由嗎? –

+0

沒有喬恩但作爲一個「dotnetnoob」我能得到「是」的語法來爲我工作。 – dotnetnoob

+1

的另一件事來檢查:你需要這個值類型和引用類型的工作?如果不是這樣,那麼「where T:class」約束可能使生活變得更簡單。 –

回答

2

您可以使用IsInstaceOfType方法和is檢查類型。

public static T ConvertTo<T>(this object @this) 
{ 
    if (@this is T) 
     return (T)@this; 
    else 
     return default(T); 
} 
+2

爲什麼不說'@this是T',而不是'的typeof(T).IsInstanceOfType(@this)'。 –

+0

別的東西一定是錯誤的。 '@這是T'是一個完美有效的表達。 (我只是測試它以確保我不吸菸)。 –

0

這也可能工作

public static T ConvertTo<T>(this object @this) 
{ 
    return (T)System.Convert.ChangeType(@this, typeof(T)); 
}