可能重复:
In C#, why can't a List<string> object be stored in a List<object> variable
假设您有一个类,该类触发具有不同类集合的事件。您想要获取这些集合并实例化一个带有List&lt; object&gt;的对象。作为它的构造函数的参数(你需要IList的方法:索引访问,indexOf等)。
最佳做法是什么?
如果事件返回List或IList,则在从更具体的类的List创建它时必须进行一些讨厌的转换,例如List&lt; SomeClass&gt;因为IList是不变的。
new DataObject(someClasses.Cast<object>().ToList())
你可以使用Enumerable&lt; whatever&gt;在事件中,至少你可以简单地做新的DataObject(someClasses.ToList())但是仍然需要创建一个可能有一些开销的新List ......
列表无法自动对象
似乎有点奇怪答案 0 :(得分:1)
问题是您将List<object>
作为参数的方法。选项:
IEnumerable<object>
List<T>
以下是您无法将List<string>
转换为List<object>
的原因:
List<string> strings = new List<string>();
List<object> objects = strings;
objects.Add(new Button());
string text = strings[0];
显然,在执行时无法“正常工作”,因此最好在编译时禁止它。第1,3和4行对我来说都很好 - 所以得到是第2行导致问题,这确实是语言的设计方式。您如何建议该语言可以设计为使上述“安全”?
对于 lot 有关通用差异的更多信息,请参阅我的NDC 2010关于该主题的讨论 - 转到NDC video page并搜索“差异”。