我们知道要将两个字符串与Unicode个字符进行比较,我们会在字符串前面附加N.类似的东西:
N'I am the ````king'.equals(x)
(在SQL server和x中也包含相同的Unicode字符。)
我们可以在SQL Server中编写。
但假设我有C#代码,其中包含一个名为x
的变量:
string x="Hi! I am good ````'"
(使用一些Unicode字符。)
还有另一个变量y
,我需要在C#代码中对此进行比较。
如何使用代码将N
值附加到字符串?
答案 0 :(得分:1)
C#中的所有字符串都是Unicode字符串。它们基于名为char
的UTF-16 代码单元,每个char
只是一个16位整数。
如果x
和y
是C#(引用)string
s,那么
x == y
和
x.Equals(y)
执行序数相等比较。因此,x
和y
必须是完全相同的16位代码单元序列,才能将其评估为true
。没有执行Unicode规范化!
.NET提供了其他方法来进行与文化相关的比较或不区分大小写的比较。这些比简单的序数比较更复杂。您还可以对x
和y
进行规范化,并比较结果。
答案 1 :(得分:1)
在C#中,您可以使用==运算符在两个字符串之间执行二进制相等比较。事实上,与String.Equals(string a, string b)
方法不同,此运算符将调用String.Equals(string value)
静态方法,该方法将处理空引用。
if (x == y) { Console.WriteLine("The variables x and y are equal."); }
如果您希望进行文化敏感和/或不区分大小写的比较,可以使用String.Equals(string a, string b, StringComparison comparisonType)
方法并指定适当的值:CurrentCulture,CurrentCultureIgnoreCase,Ordinal或OrdinalIgnoreCase。 (还有InvariantCulture和InvariantCultureIgnoreCase,但强烈建议不要使用它们)
if (string.Equals(x, y, StringComparison.OrdinalIgnoreCase)) { Console.WriteLine("The variables x and y are equal by using the OrdinalIgnoreCase comparison."); }
如果要对字符串进行排序,可以使用String.Compare
的重载之一。使用String.Compare
的良好做法是始终使用其中一个重载,您明确指定CultureInfo或StringComparison。 (如果要根据特定文化执行字符串比较,那么指定CultureInfo的内容特别有用。)