我还在为一个项目学习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[表达式.blend.sampledata.sampledatasource.myobject]'。
但我不太明白为什么-我的
SampleDataSource
不能正确地充当返回包含IEnumerable
类型的枚举器的MyObject
? 最佳答案
它不能只实现方法,而是必须实际实现接口。
在您的情况下,最好让您的类实现适当的接口。
public class SampleDataSource : IEnumerable<MyObject>, IEnumerable
否则,您可以使用类似linfu的东西将您的类隐式输入到接口。
另一个潜在的目标是使用
OfType<T>
来处理这个问题:// returns enumerable of the items that are actually assignable to MyObject
IEnumerable<MyObject> values = theDataSource.OfType<MyObject>();