通用铸造
问题描述:
我怀疑答案是否定的,但是可以在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;
}
我不能确定有关术语,它是相当困难谷歌我。 但我的猜测是这两个问题是相关的。有任何想法吗?
答
您可以使用() Operator投o
到E
:
class Converter<E>
{
public E Make(object o)
{
return (E)o;
}
}
如果使用as,o 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;
}
它可能不是与此有关,但'as'也适用于空值类型。所以例如'o as int?'不会编译。 – svick 2012-02-25 12:36:22
请注意,在您的第一个示例中,如果E是非空值类型,则拆箱转换必须准确;也就是说,如果对象包含装箱的int,则即使可以将int转换为double,也不可以将其解除加倍。 – 2012-02-25 16:05:54