我需要编写方法,该方法返回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> ;,其中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>>();
}