String.Equals
This method compares strings. It differs from the Compare and CompareTo
methods: Equals()
tests strings for equality. A StringComparison
can be used to ignore case.
The Equals
method is invoked with the method name Equals
or with the equality operator. Most C# programs use the "==" operator syntax.
Equals
exampleHere we compare strings and test equality. The various parts of this code example code not all do the same thing, but each part does compare strings in some way.
Equals
on the first string
—so it must not be null
. If the string
is null
, we will get an exception.Equals
by calling equals on the second string
instead of the first string
.string
comparisons is the equality operator.using System; string a = "a" + 1; string b = "a" + 1; // Part 1: use instance Equals() method. if (a.Equals(b)) { Console.WriteLine("a.Equals(b) = true"); } // Part 2: use instance method on other string. if (b.Equals(a)) { Console.WriteLine("b.Equals(a) = true"); } // Part 3: use op_Equality. if (a == b) { Console.WriteLine("a == b = true"); }a.Equals(b) = true b.Equals(a) = true a == b = true
Next, we review the Compare methods. You can see the result of the string.Compare
method being tested for a value of zero.
string.Compare
returns zero, the strings are equal. It returns 1 or -1 depending on the sorted order of the string
parameters.string.Compare
ever returns 1 or -1, the strings are not equal.using System; string a = "a" + 1; string b = "a" + 1; // Use Compare methods. // ... This returns zero if the strings are equal. if (string.Compare(a, b) == 0) { Console.WriteLine("string.Compare(a, b) = 0"); } // ... CompareOrdinal returns 0 if numeric values equal. if (string.CompareOrdinal(a, b) == 0) { Console.WriteLine("string.CompareOrdinal(a, b) = 0"); } // ... Use instance Compare method. if (a.CompareTo(b) == 0) { Console.WriteLine("a.CompareTo(b) = 0"); }string.Compare(a, b) = 0 string.CompareOrdinal(a, b) = 0 a.CompareTo(b) = 0
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.
Equals
and the equality operator are about the same. The clearest code is the best option here.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.
You can easily compare strings in such a way that their case differences are ignored. We use values of the StringComparison
enum
.
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.