我正在使用.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;
}
答案 0 :(得分:0)
尝试
Enum.GetValues(typeof(T))
http://msdn.microsoft.com/en-us/library/system.enum.getvalues%28v=vs.110%29.aspx