相关疑难解决方法(0)

[Flags]枚举属性在C#中意味着什么?

我不时会看到如下的枚举:

[Flags]
public enum Options 
{
    None    = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}
Run Code Online (Sandbox Code Playgroud)

我不明白[Flags]-attribute 到底是做什么的.

任何人都可以发布一个很好的解释或示例?

c# enums flags

1383
推荐指数
12
解决办法
46万
查看次数

如何比较C#中的标志?

我下面有一个标志枚举.

[Flags]
public enum FlagTest
{
    None = 0x0,
    Flag1 = 0x1,
    Flag2 = 0x2,
    Flag3 = 0x4
}
Run Code Online (Sandbox Code Playgroud)

我无法将if语句评估为true.

FlagTest testItem = FlagTest.Flag1 | FlagTest.Flag2;

if (testItem == FlagTest.Flag1)
{
    // Do something,
    // however This is never true.
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

.net c# enums flags attributes

149
推荐指数
9
解决办法
8万
查看次数

迭代Flags Enum中的值?

如果我有一个包含标志枚举的变量,我可以以某种方式迭代该特定变量中的位值吗?或者我是否必须使用Enum.GetValues迭代整个枚举并检查哪些枚举?

c# enums enum-flags

123
推荐指数
8
解决办法
6万
查看次数

如何确定Enum值是否具有与之比较的一个或多个值?

我有一个标有[Flags]属性的Enum,如下所示:

[Flags]
public enum Tag : int
{
    None = 0,
    PrimaryNav = 1,
    HideChildPages = 2,
    HomePage = 4,
    FooterLink = 8
}
Run Code Online (Sandbox Code Playgroud)

在我的站点地图中的站点地图节点上,我将标签组合的int值存储为属性.

我需要做的是检查一个节点是否有一个或多个标签中的任何一个,例如Tag.PrimaryNav | Tag.HomePage.

我正在努力使用必要的布尔逻辑来确定Enum值是否具有与其进行比较的一个或多个值.

如果不清楚,请道歉.如有必要,我可以提供更多信息.

c# enums flags

13
推荐指数
2
解决办法
7629
查看次数

应该"或"使用.Net4 Hasflags:enum.HasFlag(AccessRights.Read | AccessRights.Write)

我正在尝试新的HasFlags功能,并想知道以下是否应该工作:

enum.HasFlag(AccessRights.Read | AccessRights.Write)

......因为它似乎不...

 DBAccessRights rights = (DBAccessRights)permission.PermissionFlags;
  if (rights.HasFlag(DBAccessRights.WikiMode))
  {
     // works
  }


  if (rights.HasFlag(DBAccessRights.WikiMode | DBAccessRights.CreateNew))
  {
     // Doesn't work    
  }

  DBAccessRights flags = DBAccessRights.WikiMode | DBAccessRights.CreateNew;
  if (rights.HasFlag(flags))
  {
     // Doesn't work
  }
Run Code Online (Sandbox Code Playgroud)

c# enums .net-4.0 enum-flags

13
推荐指数
2
解决办法
7690
查看次数

Determine if an Enum value is NOT a composite in C#

EDIT:

Most people suggest that flag enums should always have values of powers of two. That may be best practice but I am not defining enums here, rather checking them and want to cover all possible scenarios within reason. The question is really about the proper way to implement the function named EnumUtilities.IsValueDefinedAndComposite<T>.

ORIGINAL POST:

Consider the following Enum:

[Flags]
public enum TestWithFlags { One = 1, Two = 2, }
Run Code Online (Sandbox Code Playgroud)

Following is the result of Enum.IsDefined with various …

.net c# enums enumeration enum-flags

5
推荐指数
1
解决办法
2207
查看次数

检查枚举是否包含多个标志

我正在尝试检查“枚举实例”是否包含多个标志。

[Flags]
public enum Foo 
{
  Bar = 1,
  Far = 2
}
Run Code Online (Sandbox Code Playgroud)
var multiState = Foo.Bar | Foo.Far;

MoreThanOneFlag(multiState); // True

var singleState = Foo.Bar;

MoreThanOneFlag(singleState); // False

Run Code Online (Sandbox Code Playgroud)

另外我真的不想使用类似下面的东西:

var state = Foo.Bar | Foo.Far;

Console.WriteLine(state.ToString().Count(x => x == ',') > 0); // True

Run Code Online (Sandbox Code Playgroud)

请注意,我不关心“实例”包含哪些标志,我只想知道是否有多个标志。

c# enums enum-flags

5
推荐指数
1
解决办法
3212
查看次数

标签 统计

c# ×7

enums ×7

enum-flags ×4

flags ×3

.net ×2

.net-4.0 ×1

attributes ×1

enumeration ×1