Dan*_*rza 33 c# string comparison
在C#中进行字符串比较时,执行a之间的区别是什么
string test = "testvalue";
test.Equals("TESTVALUE", StringComparison.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
和
string test = "testvalue";
test.Equals("TESTVALUE", StringComparison.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
......无论如何,包含额外参数是否重要?
Jon*_*eet 32
其他帖子提供了很好的建议,但我认为展示一个确实有所作为的例子可能会很好:
using System;
using System.Globalization;
using System.Threading;
class Test
{
static void Main()
{
CultureInfo turkish = CultureInfo.CreateSpecificCulture("tr");
Thread.CurrentThread.CurrentCulture = turkish;
// In Turkey, "i" does odd things
string lower = "i";
string upper = "I";
Console.WriteLine(lower.Equals(upper,
StringComparison.CurrentCultureIgnoreCase));
Console.WriteLine(lower.Equals(upper,
StringComparison.InvariantCultureIgnoreCase));
}
}
Run Code Online (Sandbox Code Playgroud)
(毫无疑问,还有很多其他案例 - 这只是我想到的第一个案例.)
Mic*_*urr 27
Microsoft为何时使用该InvariantCulture属性提供了一些不错的指导:
MSDN:CultureInfo.InvariantCulture属性
...应用程序应该仅对需要与文化无关的结果的进程使用不变文化,例如格式化和解析持久保存到文件的数据.在其他情况下,它会产生可能在语言上不正确或在文化上不合适的结果.
安全考虑因素
如果根据字符串比较或案例更改的结果做出安全决策,您的应用程序应使用忽略大小写而不是使用InvariantCulture的序数比较.[...]
字符串操作
如果您的应用程序需要执行不受CurrentCulture值影响的区分大小写的字符串操作,则应使用接受CultureInfo参数的方法.[...]
坚持数据
InvariantCulture属性对于存储不会直接显示给用户的数据非常有用.以独立于文化的格式存储数据可确保不会发生变化的已知格式.当来自不同文化的用户访问数据时,可以根据特定用户对其进行适当格式化.[...]
| 归档时间: |
|
| 查看次数: |
27315 次 |
| 最近记录: |