gpt4 book ai didi

c# - 尝试转换 IEnumerable 时出现异常?

转载 作者:太空狗 更新时间:2023-10-30 00:44:10 24 4
gpt4 key购买 nike

我还在为一个项目学习 C# 的前几周,我正在努力正确地实现 IEnumerable界面。我已经阅读了许多教程/指南,但我似乎仍然做错了什么。我有很强的 Java 背景,所以我认为我对 Java 泛型的一些了解混淆了我对它们在 C# 中的工作方式的理解。

一个我不能改变的类包含一个实例变量:

public IEnumerable<object> Items;

我想为它提供我的 SampleDataSource 的一个实例类(class)。此类充当 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;

我收到一个异常:

Additional information: Unable to cast object of type 'Expression.Blend.SampleData.SampleDataSource.SampleDataSource' to type 'System.Collections.Generic.IEnumerable`1[Expression.Blend.SampleData.SampleDataSource.MyObject]'.

但我不太明白为什么 - 不是我的 SampleDataSource正确地充当 IEnumerable返回一个包含 MyObject 的枚举器类型?

最佳答案

它不能只实现方法,而是必须实际实现接口(interface)。

在您的情况下,最好让您的类实现适当的接口(interface)。

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>();

关于c# - 尝试转换 IEnumerable 时出现异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com