![]() |
1
6
属性是[旗]而不是[旗],没有什么神奇的。它唯一可能影响的是ToString方法。当指定[Flags]时,值以逗号分隔。由您指定值,使其在位字段中有效。 |
![]() |
2
12
这个
|
![]() |
3
7
除非显式地给出其他值,否则枚举的第一项为零。对于标志枚举,最好是使用零值,因为它为零值提供了语义意义,例如“无标志”或“关闭”。这有助于维护代码,因为它可能暗示代码中的意图(尽管注释也可以实现这一点)。 除此之外,是否需要零值还取决于您和您的设计。
因为标记枚举仍然只是枚举
也就是说,想象一个要求所有按位组合的标记枚举的语法放在枚举定义的末尾,或者以某种方式标记,这样编译器就知道如何处理其他一切,这是不合理的。
例如(假设
使用这种语法,编译器可以自己创建0值,并自动为其他值分配标志。 |
![]() |
4
4
注释的C 3规范中没有任何内容,我想是这样的。 可以 做注释C 4规范中的某件事-我不确定。(我想我自己开始写这样的注释,但后来删除了它。) 对于简单的情况来说,这是可以的,但是一旦你开始添加额外的标志,它就会变得有点棘手:
麻木应该有什么价值?下一个未使用的位?如果设置一个固定的整数值呢? 我同意这是一种痛苦。也许可以制定一些合理的规则…但我想知道复杂性与价值平衡是否真的能解决问题。 |
![]() |
5
2
简单地说,
这么说之后,msdn页面 Designing Flags Enumerations 这样说:
同样,页面
|
![]() |
6
0
在C语言中,可以(AB)使用预处理器自动生成两个枚举的幂。如果有一个宏make-thing s扩展到“make-thing(flag1)make-thing(flag2)make-thing(flag3)”等,则可以多次调用该宏,使用不同的make-thing定义,从而实现两个标志名序列以及其他一些优点的幂。 例如,首先将make_thing(x)定义为“linear_enum__x”(包括逗号),然后使用enum语句生成枚举列表(包括make_things宏外部的linear_num_items)。然后创建另一个枚举,这次将make_thing(x)定义为“flag_enum__x=1< 相当漂亮的一些可以这样做的事情,带有标志和线性值自动保持同步;代码可以做一些很好的事情,比如“if(thingie[linear_enum_foo]thing_errors=flag_enum_foo;”(同时使用线性值和标志值)。不幸的是,我不知道在C或VB.NET中做任何远程类似的事情。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 3 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 3 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 3 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 4 月前 |