【发布时间】:2011-12-16 00:29:06
【问题描述】:
我还在为一个项目学习 C# 的前几周,我正在尝试正确实现 IEnumerable 接口。我已经阅读了许多教程/指南,但我似乎仍然做错了一些事情。我有很强的 Java 背景,所以我认为我对 Java 泛型的一些了解让我无法理解它们在 C# 中的工作原理。
我无法更改的类包含一个实例变量:
public IEnumerable<object> Items;
我想为它提供一个我的SampleDataSource 类的实例。此类充当List 的MyObject 类型的存储容器:
public class SampleDataSource : IEnumerable
{
public List<MyObject> Subjects { get; private set; }
public IEnumerator<MyObject> GetEnumerator()
{
return this.Cast<MyObject>().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
但是当我尝试使用此代码将这个SampleDataSource 类的一个实例 转换为IEnumerable<object> 时:
Items = (IEnumerable<MyObject>)App.SampleData;
我收到一个异常:
附加信息:无法转换类型的对象 'Expression.Blend.SampleData.SampleDataSource.SampleDataSource' 到 类型 'System.Collections.Generic.IEnumerable`1[Expression.Blend.SampleData.SampleDataSource.MyObject]'。
但我不太明白为什么 - 我的 SampleDataSource 不是正确地充当返回包含 MyObject 类型的枚举器的 IEnumerable 吗?
【问题讨论】:
标签: c# generics casting ienumerable