如果用户永远不会修改这些字符串,字符串文化信息对于比较是否重要

Is String culture info important for comparison if the user will never modify those strings

比较用户将看到但看不到的硬编码字符串时 modify/change,文化信息是否重要。

我想不会,但我只是想安全。

示例:

static void Main()
{
    string hardString = "IAMHardCodei";
    string hardString2 = "IamHardCodei";
    //Compare hardString and hardString2, ignoring case, 
    //and then do stuff based on that result
}

字符串比较的一般建议是 "programmatic only strings"(即如您指定的那样,用户不能直接使用或编辑它们是:StringComparison.Ordinal[IgnoreCase].

看到这个 SO post(这可能是重复的):Which is generally best to use -- StringComparison.OrdinalIgnoreCase or StringComparison.InvariantCultureIgnoreCase?

您可以使用InvariantCultureIgnoreCase进行比较

hardString.Equals(hardString2, StringComparison.InvariantCultureIgnoreCase);

如果您在进行比较时依赖默认值 CurrentCulture,则文化规则甚至与硬编码字符串相关。这是 MSDN 文档中的教科书示例:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US")
Debug.Assert("file" == "FILE".ToLower()); // Passes

Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
Debug.Assert("file" == "FILE".ToLower()); // Fails

通过不区分大小写的比较,您在土耳其的用户计算机认为 fileFILE 不相同,而在美国它们是相同的。