标签: enum-flags

应该"或"使用.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
查看次数

检查枚举标志的最佳做法

我注意到这两个模式用于检查枚举标志:

[Flags]
public enum PurchaseType
{
    None = 0,
    SalePrice = 2,
    RegularPrice = 4,
    Clearance = 8,
    CreditCard = 16
}

public void Test()
{
    PurchaseType type = PurchaseType.Clearance;
    type |= PurchaseType.CreditCard;

    // Practice 1
    if ((type & PurchaseType.Clearance) == PurchaseType.Clearance)
    {
        // Clearance item handling
    }

    // Practice 2
    if ((type & PurchaseType.CreditCard) != 0)
    {
        // Credit card item handling   
    }
}
Run Code Online (Sandbox Code Playgroud)

在检查枚举标志的两种方法中,哪一种更好,性能,可读性,代码健康以及我应该做出的任何其他考虑?

谢谢,穆罕默德

.net c# enums enum-flags

10
推荐指数
1
解决办法
2064
查看次数

使用带有标志的PostBack枚举复选框

我有一个枚举属性,我试图通过复选框设置其值.枚举枚举,当用户选择多个选项时,我希望该属性连接所有选定的标志.

我尝试为每个枚举值添加一个复选框,并为每个复选框指定相同的名称.在回发期间,检索第一个选定的标志但不与其他标志连接.

如果不为每个标志分别拥有单独的属性,我可以以某种方式修复

模型

public class HomeModel
{
    public Fruit MyFruits { get; set; }
}

[Flags] public enum Fruit
{
    Love = 1,
    Joy = 2,
    Peace = 4,
    Patience = 8,
    Kindness = 16,
    Goodness = 32,
    Faithfulness = 64,
    Gentleness = 128,
    SelfControl = 256
}
Run Code Online (Sandbox Code Playgroud)

视图

@model EnumFlagTest.Models.HomeModel
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
        @using (Html.BeginForm())
        {
            <h1>Fruits</h1>

            <div><label>@EnumFlagTest.Models.Fruit.Love.ToString() <input type="checkbox" name="MyFruits" value="@((int) EnumFlagTest.Models.Fruit.Love)" @(Model.MyFruits.HasFlag(EnumFlagTest.Models.Fruit.Love) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc enums enum-flags

8
推荐指数
1
解决办法
4327
查看次数

HasFlag有一个通用的枚举?

我刚刚开始使用GenericsC#但很早就遇到了问题,我怎样才能调用.HasFlag()泛型Enum呢?

public class Example<TEnum> where TEnum : struct {
}
Run Code Online (Sandbox Code Playgroud)

如何向其添加[Flags]属性?

c# generics enums enum-flags

7
推荐指数
1
解决办法
2744
查看次数

如何从标志枚举中获取数值?

可能重复:
枚举返回int值
如何从枚举中获取数值?

这不是这些的重复,感谢阅读问题模式

假设我选择了许多标志枚举项:

[Flags]
public enum Options
{
    None = 0,
    Option_A = 1,
    Option_B = 2,
    Option_C = 4,
    Option_D = 8,
}

Options selected = Options.Option_A | Options.Option_B;
Run Code Online (Sandbox Code Playgroud)

selected应该对应于3(即2 + 1)

我怎样才能把它变成一个int?

我已经看到了selected将ToString()和split()转换为每个选项的示例,例如

"Option_A | Option_B" --> { "Option_A", "Option_B" },
Run Code Online (Sandbox Code Playgroud)

然后重新组合成各自的Enum,并从中获取值,但它有点凌乱.是否有更直接的方法来获得这些值的总和?

c# enums enum-flags

7
推荐指数
1
解决办法
4266
查看次数

检查枚举是否有任何共同的标志

考虑我有这个扩展方法:

public static bool HasAnyFlagInCommon(this System.Enum type, Enum value)
{
    var flags = value.ToString().Split(new string[] { ", " }, 
                                    StringSplitOptions.None);
    foreach (var flag in flags)
    {
        if (type.ToString() == flag)
            return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

以下情况:

[Flags]
enum Bla
{
    A = 0,
    B = 1,
    C = 2,
    D = 4
}

Bla foo = Bla.A | Bla.B;
Bla bar = Bla.A;

bar.HasAnyFlagInCommon(foo); //returns true
Run Code Online (Sandbox Code Playgroud)

我想检查foo是否有任何与bar相同的标志,但是在扩展方法中必须有更好的方法来实现这种行为.

我也尝试过这样,但总是返回true:

    public static bool HasAnyFlagInCommon(this System.Enum type, Enum value)
    {
        var flags …
Run Code Online (Sandbox Code Playgroud)

c# enums flags enum-flags

7
推荐指数
2
解决办法
2308
查看次数

C#枚举 - 检查面具上的标志

我有以下枚举标志:

[Flags]
private enum MemoryProtection: uint
{
    None             = 0x000,
    NoAccess         = 0x001,
    ReadOnly         = 0x002,
    ReadWrite        = 0x004,
    WriteCopy        = 0x008,
    Execute          = 0x010,
    ExecuteRead      = 0x020,
    ExecuteReadWrite = 0x040,
    ExecuteWriteCopy = 0x080,
    Guard            = 0x100,
    NoCache          = 0x200,
    WriteCombine     = 0x400,
    Readable         = (ReadOnly | ReadWrite | ExecuteRead | ExecuteReadWrite),
    Writable         = (ReadWrite | WriteCopy | ExecuteReadWrite | ExecuteWriteCopy)
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个枚举实例,我需要检查它是否可读.如果我使用以下代码:

myMemoryProtection.HasFlag(MemoryProtection.Readable)
Run Code Online (Sandbox Code Playgroud)

它总是在我的情况下返回false,因为我认为HasFlag检查它是否有每个标志.我需要优雅的东西来避免这样做:

myMemoryProtection.HasFlag(MemoryProtection.ReadOnly)         ||
myMemoryProtection.HasFlag(MemoryProtection.ReadWrite)        ||
myMemoryProtection.HasFlag(MemoryProtection.ExecuteRead)      ||
myMemoryProtection.HasFlag(MemoryProtection.ExecuteReadWrite)
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

.net c# enums flags enum-flags

7
推荐指数
1
解决办法
1万
查看次数

将一些bool属性转换为标志枚举

我需要将具有3个bool属性的遗留类转换为标记枚举.

我知道至少有一个属性是真的.

[Flags]
public enum FlagEnum
{
    EnumValue1 = 1,
    EnumValue2 = 2,
    EnumValue3 = 4
}

public class LegacyClass
{
    public bool PropA { get; set; }
    public bool PropB { get; set; }
    public bool PropC { get; set; }
}

public class DtoClass
{
    public FlagEnum FlagEnum { get; set; }

    public DtoClass(LegacyClass legacyClass)
    {
        if (!legacyClass.PropA && !legacyClass.PropB && !legacyClass.PropC)
        {
            throw new ArgumentException();
        }

        if (legacyClass.PropA)
        {
            FlagEnum = FlagEnum.EnumValue1;
        }
        if (legacyClass.PropB)
        {
            if …
Run Code Online (Sandbox Code Playgroud)

c# enums enum-flags

7
推荐指数
2
解决办法
6270
查看次数

Haxe - 将枚举作为标志发送到函数

我只是想将我的代码从C#转换为Haxe NME.我使用枚举作为标志.

[Flags]
enum State
{
    StateOne    = 1,
    StateTwo    = 2,
    StateThree  = 4
}
Run Code Online (Sandbox Code Playgroud)

并使用它

if (someObj.HasState(State.StateOne | State.StateTwo))
{
    // Contains both the states. Do something now.
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何在Haxe NME中这样做.

谢谢.

enums flags haxe enum-flags nme

6
推荐指数
2
解决办法
1164
查看次数

如果按顺序声明[Flags]枚举会怎样?

我遇到过这个问题:[Flags]枚举属性在C#中意味着什么?

有一点我一直想知道,使用接受的答案的例子,如果我宣布会发生什么:

[Flags]
public enum MyColors
{
    Yellow = 1,
    Green = 2,
    Red = 3,
    Blue = 4
}
Run Code Online (Sandbox Code Playgroud)

该示例中的以下步骤是否会导致错误?如果不是,我怎样才能进入MyColors.Red?

c# enum-flags

5
推荐指数
2
解决办法
226
查看次数

标签 统计

enum-flags ×10

c# ×9

enums ×9

flags ×3

.net ×2

.net-4.0 ×1

asp.net-mvc ×1

generics ×1

haxe ×1

nme ×1