C#通用方法值

我需要编写方法,该方法返回List中泛型类的子级.我写了这样的东西:

static List<Model<T>> Get<T>( string value ) where T : Model<T>
{
    switch( value )
    {
        case "ROLE":
        return GetRoles();
    }
    return new List<Model<T>>();
}

GetRoles()返回List< Role&gt ;,其中Role:Model< Role>.但是visual studio告诉我它不能转换List< Role>.列出< Model< T>.

解决方法:

这里的错误是List< Role>与List< Model< T>>不同.即使角色是Model< Role>

例如,您有两个类:

public class Bar : Model<Foo>
{

}

public class Foo : Model<Foo>
{

}

并创建一个列表:

var fooList = new List<Foo>();

如果可以将其转换为List< Model< Foo>> :

var modelList = (List<Model<Foo>>) fooList ; // not possible

比您应该能够在列表中添加新的酒吧:

modelList.Add(new Bar());

但这仍然是Foo的列表,并且可能只有Foo对象.

作为解决方案,您可以尝试将角色转换为模型:

static List<Model<T>> Get<T>(string value)  where T:Model<T>
{
    switch (value)
    {
        case "ROLE":
            return GetRoles().Cast<Model<T>>().ToList();
            break;
    }
    return new List<Model<T>>();
}
上一篇:python-在Django的模板加载器中预处理SHPAML?


下一篇:Java Playframework嵌套模板-参数传递