2012-02-25 108 views
2

我怀疑答案是否定的,但是可以在C#.NET(v2.0)中做这样的事情。通用铸造

class Converter<E> 
{ 
    public E Make(object o) 
    { 
     return o as E; 
    } 
} 

如果不是,它可以检查类型是这样的:

public bool IsType(object o, Type t) 
{ 
    return o is E; 
} 

我不能确定有关术语,它是相当困难谷歌我。 但我的猜测是这两个问题是相关的。有任何想法吗?

回答

5

您可以使用() OperatoroE

class Converter<E> 
{ 
    public E Make(object o) 
    { 
     return (E)o; 
    } 
} 

如果使用aso as E需要E一个是引用类型,因为如果o不是强制转换为E,结果是(E)null。您可以限制E使用class Constraint引用类型:

class Converter<E> where E : class 
{ 
    public E Make(object o) 
    { 
     return o as E; 
    } 
} 

public bool IsType(object o, Type t) 
{ 
    return (o != null) ? t.IsAssignableFrom(o.GetType()) : t.IsClass; 
} 
+1

它可能不是与此有关,但'as'也适用于空值类型。所以例如'o as int?'不会编译。 – svick 2012-02-25 12:36:22

+0

请注意,在您的第一个示例中,如果E是非空值类型,则拆箱转换必须准确;也就是说,如果对象包含装箱的int,则即使可以将int转换为double,也不可以将其解除加倍。 – 2012-02-25 16:05:54