2012-11-08 104 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)); 
}