标签: flags

测试单个值的[Flags]枚举值

如果我有一个enum标记的[Flags],有没有办法在.NET中测试这种类型的值,看它是否只包含一个值?我可以使用位计数得到我想要的结果,但如果可能的话我宁愿使用内置函数.

enum动态循环遍历值时,Enum.GetValues()也会返回组合标志.enum在以下示例中调用该函数将返回4个值.但是,我不希望内部算法中包含值组合.测试单个enum值的相等性是不合适的,因为它enum可能包含许多值,并且在enum更改中的值时还需要额外的维护.

[Flags]
enum MyEnum
{
    One = 1,
    Two = 2,
    Four = 4,
    Seven = One | Two | Four,
}

void MyFunction()
{
    foreach (MyEnum enumValue in Enum.GetValues(typeof(MyEnum)))
    {
        if (!_HasSingleValue(enumValue)) continue;

        // Guaranteed that enumValue is either One, Two, or Four
    }
}

private bool _HasSingleValue(MyEnum value)
{
    // ???
}
Run Code Online (Sandbox Code Playgroud)



相关:StackOverflow:组合标志上的Enum.IsDefined

.net c# enums flags

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

是否有任何技术可以使用flag参数拆分方法?

我有一个带有flag参数的方法.我认为将布尔值传递给方法是一种不好的做法(使签名复杂化,违反了"每种方法做一件事"的原则).我认为将方法分为两种不同的方法更好.但如果我这样做,这两种方法将非常相似(代码重复).

我想知道是否有一些通用技术将带有flag参数的方法拆分为两个独立的方法.

这是我的方法(Java)的代码:

int calculateNumOfLiveOrDeadNeighbors(Cell c, int gen, boolean countLiveOnes) {
   int x = c.getX();
   int y = c.getY();
   CellState state;
   int aliveCounter = 0;
   int deadCounter = 0;
   for (int i = x - 1; i <= x + 1; i++) {
      for (int j = y - 1; j <= y + 1; j++) {
         if (i == x && j == y)
            continue;
         state = getCell(i, j).getCellState(gen);
         if (state == CellState.LIVE || state == CellState.SICK){
            aliveCounter++;
         } …
Run Code Online (Sandbox Code Playgroud)

java flags refactoring coding-style

8
推荐指数
2
解决办法
985
查看次数

C#中的否定标志

嘿,有没有办法在C#中存储负面标志?例如,我有以下标志枚举代表一些样式:

[Flags]
public enum Styles
{
    Default = 0,
    Bold = 1,
    Italic = 2
}
Run Code Online (Sandbox Code Playgroud)

现在我有多个对象,可以应用这些样式,然后将所有相关组合起来(即其他对象可以继承一些以前设置的样式).除此之外,我想定义负面标志,基本上撤消继承的样式.因此,如果先前将样式设置为Styles.Bold | Styles.Italic并且对象继承了该样式但Styles.Bold设置了负标志,则结果应该是正确的Styles.Italic.

是否有任何机制已经这样做了?我现在基本上有两种方式:首先是定义NotXY枚举值,然后以某种方式解析以消除XY设置时的值.

另一个是简单地定义两个字段,正标志和负标志,其中负标志是在额外字段中专门定义的,我通过简单的方式得到结果标志positiveFlags ^ negativeFlags.

编辑:

如果不清楚,我需要存储每个中间对象的样式.所以它可能是这样的:

object1: Default
object2: Bold
object3: -Bold Italic
Run Code Online (Sandbox Code Playgroud)

如果object3也继承了1和2的值,那么最终结果应该是正确的Italic.

回答Kieren Johnstone的问题的另一个例子,并且根据我在评论中的陈述,负值仅适用于当前级别:

1: Bold
2: -Bold -Italic
3: Italic
Run Code Online (Sandbox Code Playgroud)

2从先前的对象中消除了Bold和Italic,但是不应该再应用任何进一步的(正值应该),因此最终值将Italic再次出现.

c# enums flags

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

Intent启动新活动非常缓慢:(

我有一段意图的代码:

Intent i = new Intent();
        i.setAction(Intent.ACTION_MAIN);
        i.addCategory(Intent.CATEGORY_LAUNCHER);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        i.setComponent(new ComponentName(packToLaunch, nameToLaunch));
        startActivity(i);
Run Code Online (Sandbox Code Playgroud)

这基本上是基于我传递给它的包名称启动一个新活动.有时,启动此新活动最多需要5秒钟.有没有办法加快这个过程?当我有一个仍在运行的应用程序时,它甚至需要很长时间.请帮忙...

flags android components package android-intent

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

在Java方法中使用标志的最佳实践

在Java方法中指定标志的最佳做法是什么?

我已经看到SWT使用int作为位域,如:

(部分来自"Effective Java,2nd Ed."第159页):

public class Text {
  public static final int STYLE_BOLD = 1 << 0; // 1
  public static final int STYLE_ITALIC = 1 << 1; // 2

  void printText(String text, int flags) {

  }
}
Run Code Online (Sandbox Code Playgroud)

你的客户电话看起来像:

printText("hello", Text.STYLE_BOLD | Text.STYLE_ITALIC);
Run Code Online (Sandbox Code Playgroud)

..但是这是不鼓励的,因为你可以将来自不同类的标志(int值)混合在一起,而无需任何编译器检查.

在同一本书("Effective Java")中,我看到了EnumSet的使用,但随后您的用户调用变为:

printText("hello", EnumSet.of(Style.Bold, Style.ITALIC));
Run Code Online (Sandbox Code Playgroud)

我发现这有点冗长,我更喜欢SWT的优雅.

还有其他选择还是这基本上是你必须选择的两种口味?

java flags swt enumset

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

`ordered`标志在多对多关系中做了什么?

在寻找将有序多对多关系添加到我的核心数据模型的方法时,我对模型的更改量变化最小,我注意到了多对多关系的选项ordered(见下面的截图).哇,听起来不错,但它做了什么?

当我检查或取消选中它时,我的SQLite商店没有抱怨,我的应用程序仍然可以编译并运行正常.我想也许轻量级迁移可以处理变化,但从它的外观来看,我所有的自定义NSManagedObject子类都可以工作而不需要修改,所以发生了什么?

Xcode 4数据模型检查器的屏幕截图

总结一下问题:

  • ordered标志是否应该将to-many关系的数据类型更改NSSetNSArray
  • 或者只是修改集合的顺序会持续在顺序读取和写入上吗?
  • 或者我错了我的假设,它完全是另一回事吗?
  • 是否有描述此功能的Apple文档页面?

非常感谢!

flags core-data objective-c

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

函数参数中的PHP标志是什么?

我注意到PHP中的一些函数使用flags作为参数.是什么让他们独特而不是普通的字符串参数?我问,因为我想在我自己的自定义函数上使用它们,但我很好奇这个过程是做什么的.

编辑:总结一下,何时最好使用标志创建自定义函数,何时不是

php flags function

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

用于在c#中定义权限集的枚举

我们不是将每个权限拆分成单独的列或sql server表,而是重新考虑使用Flag属性来Enum使用逐位操作.我们的应用程序定义端点(不是休息服务中的端点)来访问资源(读取,修改,更新),并且每个用户都有权限,例如Bob has permissions to Read, Modify resource X当bob到来并访问此资源时,我们检查bob是否具有权限x.现在我们将要应用的地方很清楚这里是我的疑惑

  • 假设Bob使用标记的枚举对资源有读,写,删除权限我会做的Permission.Read | Permission.Write | Permission.Delete是比特的结果和整数或另一个枚举?

  • 对于在数据库表中存储此权限,列应该是integer

  • 如果回答问题1 Enum那么我应该在Permissions枚举上定义另一个属性,表示Bit wise和operation的整数值吗?

disclaimer:示例中提到的Bob并不代表​​Stack溢出网络中的任何用户或任何人.这只是另一个角色

.net c# permissions enums flags

8
推荐指数
2
解决办法
2263
查看次数

向批处理脚本添加标志

我正在编写一个将在目录上运行的Batch脚本.我希望能够添加一个标志(例如-r或/ r或类似的东西),使脚本运行文件夹树而不是单个目录.是否可以使用批处理添加标记选项?

谢谢

flags batch-file

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

制作Perl脚本*使用标志运行*

我是Perl的新手,最近遇到了以下问题.我的Perl代码必须全部驻留在一个文件中(它由另一个我无法控制的程序调用).我现在希望使用标志运行脚本(例如,perl myscript.pl -T对于污点模式),尽管它最初是在没有标志的情况下调用的.我怎么能这样做,即如何从Perl文件中"设置标志"?

我有一个想法是让文件再次启动(在没有标志的情况下调用之后),这次使用-T标志(通过发出诸如shell的命令system($^X, "myscript.pl -T", @ARGS);).那会有用吗?有更好的想法吗?

perl flags

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