是否可以将课程转换为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;
}
这就是我想的那个班级对象......
答案 0 :(得分:5)
如果你想创建一个单元素集合(你的问题不是很清楚),你可以简单地使用一个数组:
IEnumerable<CustomObject> data = new []{ itemsSource };
答案 1 :(得分:0)
您必须从IEnumerable
派生并最终实施它。这适用于您只需要foreach
类实例的情况,例如,如果它是一个项目集合。
其他方式,它只是在您的类上定义this[key]
(索引器)属性,因此您将能够使用您的实例,如
itemsSource[SOME_KEY]
答案 2 :(得分:0)
即使你的问题不是那么清楚,我也是@ehsan我无法理解你想要完成什么,我想,从你提出的唯一的事情开始,最简单的方法就是实现{{ 1}}接口,更好的是以这种方式实现通用版本IEnumerable
,你可以枚举一个众所周知的类型的枚举器,具有你可以获得的所有优点,例如。 linq运营商支持无需投射等。
实现这一目标的另一种方法是,在没有实现整个接口的情况下,更优雅的方法应该是实现 yield模式,这样做可以提供一个返回枚举器的方法{{1}在方法中,在foreach循环中,只需返回当前项,这将提供枚举器支持,而不实现IEnumerable。
答案 3 :(得分:-1)
所以简单的答案是
var enumerable = (IEnumerable)itemsSource;
但为了给你一个正确的答案,我应该知道有关CustomObject的全部细节。