【发布时间】:2014-10-31 14:05:03
【问题描述】:
我的代码中有以下enum:
[Flags]
public enum Column
{
FirstName = 1 << 0,
LastName = 1 << 1,
Address = 1 << 2,
}
现在我有一个可以接受enum 的方法。
public void ParseColumns(Column col)
{
//do some parsing...
}
这个方法可以这样调用:
ParseColumns(Column.FirstName | Column.LastName);
ParseColumns(Column.LastName);
ParseColumns(Column.LastName | Column.Address | Column.FirstName);
ParseColumns(Column.Address | Column.FirstName);
我现在需要遍历这些值,但要保持 enum 传递给方法的顺序。
我找到了以下方法,它使我有可能遍历它们,但遗憾的是它返回了它在 Enum 本身中定义的顺序,而不是我如何调用该方法。
Iterate over values in Flags Enum?
【问题讨论】:
-
Column.FirstName | Column.LastName和Column.LastName | Column.FirstName是完全相同的值。您所要求的就像拨打电话Foo(1+1)的行为与Foo(2)不同。 -
ParseColumns()只接收一个值(在您的情况下它将是int),它显然不包含任何 order 信息。您将需要使用包含订单的合适类型(List、数组等)或提供订单信息作为另一个参数(例如,string由数字组成,"132"将指定FirstName>Address>LastName订单)。