C# 使用StringComparison.InvariantCultureIgnoreCase

C# 使用StringComparison.InvariantCultureIgnoreCase,c#,C#,我有以下代码行: var c = value.FirstOrDefault(x => x.Culture == Thread.CurrentThread.CurrentCulture.Name); var d = value.FirstOrDefault(x => String.Equals(x.Culture == Thread.CurrentThread.CurrentCulture.Name, StringComparison.InvariantCultureIgnoreCa

我有以下代码行:

var c = value.FirstOrDefault(x => x.Culture == Thread.CurrentThread.CurrentCulture.Name);

var d = value.FirstOrDefault(x => String.Equals(x.Culture == Thread.CurrentThread.CurrentCulture.Name, StringComparison.InvariantCultureIgnoreCase));
基本上,我在寻找一个与当前线程区域性相同的区域性字符串

如果当前的文化是en-US,我希望获得该项目,即使其文化是en-US。。。所以我想忽略这个案例

奇怪的是c变成了项,而d是空的

知道原因吗?

你的问题是:

var d ... x.Culture == Thread.CurrentThread.CurrentCulture.Name
其计算结果为true,因此使用string.Equals的位置会产生意外的结果

所以正确的代码是:

var d = value.FirstOrDefault(x => String.Equals(x.Culture, Thread.CurrentThread.CurrentCulture.Name, StringComparison.InvariantCultureIgnoreCase));
难道不是吗

var d = value.FirstOrDefault(x => String.Equals(x.Culture, Thread.CurrentThread.CurrentCulture.Name, StringComparison.InvariantCultureIgnoreCase));

在您的代码示例中,d和value之间没有=运算符。这只是示例中的输入错误还是实际代码中的输入错误?字符串中的==可能就是问题所在。您是否阅读了代码并首先使用调试器进行调试?@EvanMulawski-我认为这就是问题所在。它将此转换为对String.equalString的调用,其中布尔值和枚举值被隐式转换为字符串。