簡體   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