我有一个接口(interface)和 2 个继承该接口(interface)的类,如下所示
public interface ILeader
{
int ID { set; get; }
string Name { set; get; }
}
public class User : ILeader
{
public int ID { set; get; }
public string Name { set; get; }
}
public class Group : ILeader
{
public int ID { set; get; }
public string Name { set; get; }
}
现在我有 2 个方法,其参数类型为 ILeader
和 ILeader 的 IList
public void Change(ILeader leader)
{
//do some thing
}
public void ChangeList(IList<ILeader> leaderList)
{
//do some thing
}
现在我可以将 Group
或 User
的对象传递给 Change 方法并且它可以工作。但是当我尝试用 List
到 ChangeList
方法做同样的事情时,它给我编译时错误。
IList<User> userList=new List<User>();
userList.Add(new User { ID=1, Name ="Happy"});
Change(userList[0]); //this works
ChangeList(userList); //this throws compile error
错误是
cannot convert from List<User> to List<ILeader>
如何使我的 ChangeList
方法起作用,以便我可以同时传递 Users
和 Groups
列表?
最佳答案
如果您使用的是 .Net 4.0 或更高版本,您可以将 IList(T) 更改为 IEnumerable(T),它将起作用。 IList(T) 接口(interface)的 T 参数不是协变的,而 IEnumerable(T) 接口(interface)的 T 参数是。见
http://msdn.microsoft.com/en-us/library/dd469487.aspx
进一步解释。
关于c# - 作为方法参数类型的接口(interface)有效但不是接口(interface)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13201259/