我会看一遍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 );
答案 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