如何将Class转换为IEnumerable

本文关键字:IEnumerable 转换 Class | 更新日期: 2023-09-27 17:52:52

是否可以将class转换为IEnumerable ?

 private SeriesMapping CreateSeriesMapping(string category, string value, string stackKey, CustomObject itemsSource)
    {
        var data= (IEnumerable)itemsSource;
        SeriesMapping successMapping = new SeriesMapping() { SeriesDefinition = new StackedBar100SeriesDefinition() { StackGroupName = stackKey } };
        successMapping.ItemMappings.Add(new ItemMapping(category, DataPointMember.XCategory));
        successMapping.ItemMappings.Add(new ItemMapping(value, DataPointMember.YValue));
        successMapping.ItemsSource = data; // after conversion i did not any data.
     // successMapping.ItemsSource = itemsSource; //if i use this i did not get error But while opening the chart Null Reference exception is coming. 
        return successMapping;
    }

这就是我认为的类对象....

如何将Class转换为IEnumerable

如果您想创建一个单元素集合(您的问题不是很清楚),您可以简单地使用数组:

IEnumerable<CustomObject> data = new []{ itemsSource };   

您必须从IEnumerable派生并最终实现它。这适用于当您需要简单的情况,例如,在类实例上使用foreach,例如,如果它是项的集合。

实现IEnumerable。

其他方式它只是定义this[key] (indexer)属性在你的类,所以你将能够使用你的实例,如

itemsSource[SOME_KEY]
在c#中使用索引器

即使你的问题不那么清楚,我也是@ehsan我无法理解你想要完成的事情,我认为,从你问的唯一的事情开始,最简单的方法就是实现IEnumerable接口,更好的方法是实现通用版本IEnumerable<T>,这样你就可以枚举一个众所周知的类型枚举器,你可以获得所有的优势,例如。Linq操作符支持不强制转换等。

另一种方法,一种更优雅的方法,不需要实现整个接口,应该实现yield模式,这样你就可以提供一个返回枚举数IEnumerable<T>的方法,在foreach循环中,简单地返回当前项,这将提供一个枚举数支持,而不需要实现IEnumerable。

仅供参考产量使用示例&ref

所以简单的答案是

  var enumerable = (IEnumerable)itemsSource;

但是为了给你一个正确的答案,我应该知道关于CustomObject的全部细节。

相关文章: