在泛型类型中转换异常

时间:2012-11-27 07:18:13

标签: c# generics

public class clsA<T, T1>
    where T : class
    where T1 : class
{
    public T GetEntity()
    {
        return (T) new clsB<T1>();            
    }
}
  

我收到错误无法将类型clsB<T1>转换为T

请帮忙

1 个答案:

答案 0 :(得分:0)

那是因为T可以是任何东西 - 例如string,这会导致演员表失败。如果T不能是变量类型,则不要将其包含在通用参数列表中。

如果您想允许TclsB<T1>或任何子类型,并且您想构建该类的实例,请改为执行此操作:

public class clsA<T, T1>
    where T : clsB<T1>, new()
    where T1 : class
{
    public T GetEntity()
    {
        return new T();
    }
}

然后,给出类型:

public class clsC : clsB<string> { }

GetEntity()类型的对象上调用clsA<clsC, string>将构造并返回clsC的实例。

相关问题