如果用户永远不会修改这些字符串,字符串文化信息对于比较是否重要
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
通过不区分大小写的比较,您在土耳其的用户计算机认为 file
和 FILE
不相同,而在美国它们是相同的。
比较用户将看到但看不到的硬编码字符串时 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
通过不区分大小写的比较,您在土耳其的用户计算机认为 file
和 FILE
不相同,而在美国它们是相同的。