如何将Class转换为IEnumerable?

时间:2014-03-25 09:16:49

标签: c# list ienumerable

是否可以将课程转换为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;
    }

这就是我想的那个班级对象......

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

您必须从IEnumerable派生并最终实施它。这适用于您只需要foreach类实例的情况,例如,如果它是一个项目集合。

Implement IEnumerable

其他方式,它只是在您的类上定义this[key](索引器)属性,因此您将能够使用您的实例,如

itemsSource[SOME_KEY]

Using indexer in C#

答案 2 :(得分:0)

即使你的问题不是那么清楚,我也是@ehsan我无法理解你想要完成什么,我想,从你提出的唯一的事情开始,最简单的方法就是实现{{ 1}}接口,更好的是以这种方式实现通用版本IEnumerable,你可以枚举一个众所周知的类型的枚举器,具有你可以获得的所有优点,例如。 linq运营商支持无需投射等。

实现这一目标的另一种方法是,在没有实现整个接口的情况下,更优雅的方法应该是实现 yield模式,这样做可以提供一个返回枚举器的方法{{1}在方法中,在foreach循环中,只需返回当前项,这将提供枚举器支持,而不实现IEnumerable。

仅供参考 yield usage example & ref

答案 3 :(得分:-1)

所以简单的答案是

  var enumerable = (IEnumerable)itemsSource;

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