2014-05-02 56 views
0

我使用的.NET System.Windows.Forms.DataVisualization.Charting类型和希望在MarkerStyle分配给每个系列创建最好跳过MarkerStyle.None,但每次和骑自行车获得下一个周围再次开始。如何通过枚举循环无限期,但不是在一个for循环?

private MarkerStyle markers = new MarkerStyle(); 

public Series CreateSeries(string name) 
{ 
    var s = chart1.Series.Add(name); 
    s.ChartType = SeriesChartType.Point; 
    s.MarkerSize = 7; 
    s.MarkerStyle = Cycle(markers ,MarkerStyle.None); // get next marker style 
    s.XValueType = ChartValueType.DateTime; 
    return s; 
} 

我尝试下面的代码,我发现的变化,所有这些都不会编译:

public static IEnumerable<T>Cycle<T>(IEnumerable<T> iterable,<T> skip) 
{ 
    while (true) 
    { 
     foreach (T t in iterable) 
     { 
      if(t == skip) 
      continue; 
      yield return t; 
     } 
    } 
} 

给出错误

CS0411。对于方法 “MyClass.Cycle(System.Collections.Generic.IEnumerable)”类型参数不能 从使用中推断出来。尝试明确指定类型参数 。

虽然我有一个具体的用途,它将是一个普通的答案很好。

编辑:具有上面的代码更仔细地看了看,我看到它永远不会foreach循环之外工作。何哼。时间写了黑客:

private int _markerIter = 0; 
private readonly int _markerCount = Enum.GetValues(typeof(MarkerStyle)).Length; 
public MarkerStyle Cycle() 
{ 
    if (_markerIter + 1 == _markerCount) 
    { 
     _markerIter = 1; //skips MarkerStyle.None which is == 0 
    } 
    else 
    { 
     _markerIter++; 
    } 

    return (MarkerStyle) _markerIter; 
} 
+1

没有什么不对您的循环方法 - 问题是,当你调用它,你的第一个参数是一个实例MarkerStyle,不MarkerStyle –

+0

感谢马丁的枚举我想MarkerStyle,但其产生的编译器错误太多。所以枚举不是可枚举的? –

回答