[英]Reimplementing Enum.HasFlag for use in Mono 2.6
我正在尝试将Jint转换为在Mono 2.6中使用。 不幸的是,Mono 2.6没有Enum.HasFlag,这就是他们在Jint中使用的东西。 我还应该补充一点,我对C#还是很陌生。
根据MSDN页面( http://msdn.microsoft.com/zh-cn/library/system.enum.hasflag(v=vs.110).aspx ),实现应为
thisInstance And flag = flag
但这似乎没有多大意义。 如果所有这些都是按位运算,岂不是更像这样吗?
thisInstance & flag == flag
因此,我要修改的行是
Writable = !fieldInfo.Attributes.HasFlag(FieldAttributes.InitOnly);
我一直坚持
var thisInstance = fieldInfo.Attributes;
var thisFlag = FieldAttributes.InitOnly;
var hasFlag1 = thisInstance & thisFlag == thisFlag;
var hasFlag2 = thisInstance And thisFlag = thisFlag;
Writable1 = !hasFlag1;
Writable2 = !hasFlag2;
可以理解,编译器不喜欢这两个。 对于hasFlag1我得到
Operator '&' cannot be applied to operands of type 'System.Reflection.FieldAttributes' and 'bool'
对于hasFlag2:
Unexpected symbol 'And'
只想知道是否有人知道该怎么做。
谢谢!
似乎基于编译器的错误,==优先于&。 因此,您的行将按以下方式进行评估:var hasFlag1 = thisInstance&(thisFlag == thisFlag);
您想要的是:
var hasFlag1 = (thisInstance & thisFlag) == thisFlag;
因此,如果添加括号,则编译器错误应消失。
最有可能And
是VB等价的&
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.