在Enum中用'~`使用

时间:2017-09-10 12:04:24

标签: c# enums

我会看一遍answer

似乎无法理解这行代码:

我正努力争取尽可能多的文化。

CultureInfo[] cinfo = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);

public enum CultureTypes
{
    NeutralCultures = 1,
    SpecificCultures = 2,
    InstalledWin32Cultures = 4,
    AllCultures = 7,
    UserCustomCulture = 8,
    ReplacementCultures = 16,
    [Obsolete("This value has been deprecated.  Please use other values in CultureTypes.")]
    WindowsOnlyCultures = 32,
    [Obsolete("This value has been deprecated.  Please use other values in CultureTypes.")]
    FrameworkCultures = 64,
}

代字号是否使构造函数的行为如下?:

CultureInfo[] cinfo = CultureInfo.GetCultures(CultureTypes.AllCultures | 
CultureTypes.NeutralCultures | 
CultureTypes.SpecificCultures | 
CultureTypes.InstalledWin32Cultures | 
CultureTypes.UserCustomCulture | 
CultureTypes.ReplacementCultures );

2 个答案:

答案 0 :(得分:1)

〜是按位补码运算符,如下所述:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/bitwise-complement-operator

请参阅Luceros在Odeds对这个问题的回答中的评论:Why not all countries are presented in CultureInfo.GetCultures()?,它解释了Bitwise补码运算符用于表示不应在表达式的结果中使用Neutral Cultures。

答案 1 :(得分:1)

这个表达式:

CultureTypes.AllCultures & ~CultureTypes.NeutralCultures

是否等同于(自然语言):" AllCultures除了NeutralCultures"。

按位补码运算符~将取消CultureTypes.NeutralCultures的值。

让我们手动做一些按位数学运算:

AllCultures            = 0111 // 1+2+4=7
NeutralCultures        = 0001 // 1
SpecificCultures       = 0010 // 2
InstalledWin32Cultures = 0100 // 4

所以:

~NeutralCultures = 1110 // bits flipped

AllCultures & ~NeutralCultures = 0111 & 1110

结果是:

0111
1110
----
0110

0110是十进制的6,相当于SpecificCultures | InstalledWin32Cultures