如何无限循环枚举但不在for循环中?

时间:2014-05-02 15:12:17

标签: c# enums mschart

我正在使用.NET System.Windows.Forms.DataVisualization.Charting类型,并想为我创建的每个系列分配一个MarkerStyle,最好是跳过MarkerStyle.None,但每次都要获取下一个并循环到重新开始。

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 个答案:

答案 0 :(得分:0)