2014-05-02 98 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,但其產生的編譯器錯誤太多。所以枚舉不是可枚舉的? –

回答