C# String Equals ExamplesUse the string.Equals method. Equals is benchmarked against the equality operator.
compares strings. It is not the same as the Compare and CompareTo methods. Equals tests strings for equality. A StringComparison can be used to ignore case.Compare
The Equals method is invoked with the method name Equals or with the equality operator. Most C# programs use the "==" operator syntax.
Let us begin. We compare strings and test equality. We see the instance Equals method in part 1 and 2, the op_Equality operator in part 3, and three Compare methods.
Info: There are small differences in the behavior of these statements. Parts 1 and 2 require that the string be non-null.
Operator: The most common method for string comparisons is part 3. Sometimes operator overloading is confusing.
And: It might obscure what the compiler actually does with the expression. The compiler calls an operator method.Operator
Finally: We use Compare, CompareOrdinal and CompareTo to get int indicating whether the first string is larger or smaller alphabetically.
C# program that compares strings for equality
static void Main()
string a = "a" + 1;
string b = "a" + 1;
// Compare a to b using instance method on a.
Console.WriteLine("a.Equals(b) = true");
// Compare b to a using instance method on b.
Console.WriteLine("b.Equals(a) = true");
// Compare a to b with op_Equality
if (a == b)
Console.WriteLine("a == b = true");
// Compare with string.Compare; this returns zero if they are equal
if (string.Compare(a, b) == 0)
Console.WriteLine("string.Compare(a, b) = 0");
// Compare with string.CompareOrdinal
// This returns zero if the char numeric values are equal
if (string.CompareOrdinal(a, b) == 0)
Console.WriteLine("string.CompareOrdinal(a, b) = 0");
// Compare with instance Compare method
if (a.CompareTo(b) == 0)
Console.WriteLine("a.CompareTo(b) = 0");
a.Equals(b) = true
b.Equals(a) = true
a == b = true
string.Compare(a, b) = 0
string.CompareOrdinal(a, b) = 0
a.CompareTo(b) = 0
IL. Let us see what the instance Equals method and the equality operator do internally. The Equals method is found in mscorlib.dll. It has the following internal code.
Equals instance method on string type: C#
// 1. Equals instance method
public bool Equals(string value)
if ((value == null) && (this != null))
return EqualsHelper(this, value);
Equality operator on string type: IL
// The == operator overload MSIL:
.method public hidebysig specialname static bool
op_Equality(string a, string b) cil managed
L_0002: call bool System.String::Equals(
// Calls into this:
public static bool Equals(string a, string b)
return ((a == b) || (((a != null) &&
(b != null)) && EqualsHelper(a, b)));
To test the code for Equals methods, I ran a benchmark of 2 strings that are equal but don't share a string pool reference. This avoids the intern pool.string.Intern
Results: The performance of Equals and the equality operator are about the same. The clearest code is the best option here.
Info: In older .NET Frameworks, the equality operator was faster, but I cannot reproduce this result in 2019.
So: Prefer comparing 2 strings with "==" when possible, as it is clear and commonly done in C# programs.
Next, we review the Compare methods. In the first example in this article, you can see the result of the string.Compare method being tested for a value of zero.
Tip: When string.Compare returns zero, the strings are equal. It returns 1 or -1 depending on the sorted order of the string parameters.
Info: This means that if string.Compare ever returns 1 or -1, the strings are not equal.
You will find that, as FxCop recommends, testing against Length is usually the best way. The string.IsNullOrEmpty method deserves a special mention—it is fast and safe.IsNullOrEmpty, IsNullOrWhiteSpace
You can easily compare strings in such a way that their case differences are ignored. We use values of the StringComparison enum.
Tip: To do this, use the StringComparison.OrdinalIgnoreCase or other culture-specific methods in the Equals method.StringComparison, StringComparer
A summary. We used the string.Equals and Compare methods. The string.Equals and equal operators have the same use normally. Compare and CompareTo are useful for sorting.
© 2007-2019 Sam Allen. Every person is special and unique. Send bug reports to firstname.lastname@example.org.