【发布时间】:2012-12-18 04:39:53
【问题描述】:
我想在 C# 中做一些类似协变的事情,但我这里没有任何继承。
我有这个代码:
public interface IBirthday
{
void Dance ();
}
public class Birthday:IBirthday
{
public void Dance()
{}
}
void Main()
{
List<Birthday> l= new List<Birthday>();
List<IBirthday> d = l; //<--- How can I accomplish that ?
}
我怎样才能完成这项工作? (除了手动迭代和构建(linq 或循环))
List<IBirthday> d = list of birthdays ?
迭代/linq 是唯一的选择吗?
【问题讨论】:
-
你试过
Cast吗? -
你不能也不应该,正是因为缺乏协变,它不是类型安全的。不过,您应该可以使用
IEnumerable<IBirthday> d = l;。 -
为什么要
List<IBirthday>?这是关键,用例似乎很小。 -
@millimoose - 考虑将其发布为答案。
标签: c# .net .net-4.0 interface