通用铸造

Mar*_*son 2 c# generics types casting

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

class Converter<E>
{
    public E Make(object o)
    {
        return o as E;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有,是否可以检查这样的类型:

public bool IsType(object o, Type t)
{
    return o is E;
}
Run Code Online (Sandbox Code Playgroud)

我不确定这个术语所以谷歌对我来说相当困难.但我的猜测是这两个问题是相关的.有任何想法吗?

dtb*_*dtb 5

你可以施放oE使用()操作:

class Converter<E>
{
    public E Make(object o)
    {
        return (E)o;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果使用as,则o as E需要E成为引用类型,因为如果o不能转换为E,则结果为(E)null.您可以E使用 Constraint约束引用类型:

class Converter<E> where E : class
{
    public E Make(object o)
    {
        return o as E;
    }
}
Run Code Online (Sandbox Code Playgroud)
public bool IsType(object o, Type t)
{
    return (o != null) ? t.IsAssignableFrom(o.GetType()) : t.IsClass;
}
Run Code Online (Sandbox Code Playgroud)