繁体   English   中英

重新实现Enum.HasFlag以在Mono 2.6中使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM