我试图将Jint转换为在Mono 2.6中使用。不幸的是,Mono 2.6没有Enum.HasFlag和他们在Jint中使用的东西。我还要补充一点,我对C#很新。
根据MSDN页面(http://msdn.microsoft.com/en-us/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'
只是想知道是否有人知道这是怎么做的。
谢谢!
答案 0 :(得分:1)
似乎基于编译器的错误,==优先于&amp ;. 因此,您的行评估如下: var hasFlag1 = thisInstance& (thisFlag == thisFlag);
你想要的是这个:
var hasFlag1 = (thisInstance & thisFlag) == thisFlag;
因此,如果添加括号,编译器错误应该消失。
很可能And
是VB等效于&