作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码:
[Flags()]
public enum Foo
{
Unknown = 0x00,
A = 0x01,
B = 0x02,
C = 0x04,
D = 0x08,
}
public static class Extensions
{
public static List<Foo> AsList(this Foo types)
{
List<Foo> list = new List<Foo>();
foreach(Foo sT in Enum.GetValues(typeof(Foo)))
{
if ((sT & types) == sT) list.Add(sT);
}
return list;
}
}
class Program
{
static void Main(string[] args)
{
Foo foo1 = Foo.A | Foo.B | Foo.C;
Foo foo2 = Foo.C | Foo.B;
Foo firstInfoo1 = foo1.AsList()[0];
Foo firstInFoo2 = foo2.AsList()[0];
}
}
现在 firstInfoo1
和 firstInfoo2
都变成了 Unknown
,这是我不想要的。看到那里的代码我应该总是返回索引 [1],如下所示: foo1.AsList()[1]
?
这是个好主意吗?关于错误的任何想法,需要进行边界检查。
另外让我们看看 foo2,我首先添加了 Foo.C
,然后添加了 Foo.B
。有什么方法可以从 AsList Foo.C
而不是 Foo.B
获取,即按添加顺序排列的第一个。
这可能吗?
感谢您的帮助。
谢谢
最佳答案
删除“未知”值,或执行以下操作:
if ((int)sT != 0 && (sT & types) == sT) list.Add(sT);
一点背景知识:这些 OR 运算的枚举并不像内存中那样存储,它们存储为简单的整数,因此 .NET 不知道该枚举是如何构造的。
关于c# - 如何从标志枚举值中仅获取第一个值并按照它们添加的顺序获取它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20267606/
我是一名优秀的程序员,十分优秀!