文字列はイミュータブルオブジェクトですから、普通は == や object.Equals つまり値比較を使用しますね。
(クラスなのに文字列だけ特殊で、イミュータブルなので、参照比較ではないというかんじ。)
某SNSの某C#コミュでの話題なんですが・・・。

string.Emptyと長さ0の文字列を参照比較した場合、.NET Framework 1.1 と .NET Framework 2.0 で挙動がかわってるっぽいです。

以下サンプルコード

string empty = string.Empty;

string zeroLength = "";

 

// 参照比較

Console.WriteLine(object.ReferenceEquals("", ""));

Console.WriteLine(object.ReferenceEquals(zeroLength, ""));

Console.WriteLine(object.ReferenceEquals(empty, zeroLength));

Console.WriteLine(object.ReferenceEquals(empty, ""));

// 値比較

Console.WriteLine(object.Equals("", ""));

Console.WriteLine(object.Equals(zeroLength, ""));

Console.WriteLine(object.Equals(empty, zeroLength));

Console.WriteLine(object.Equals(empty, ""));

// 値比較

Console.WriteLine("" == "");

Console.WriteLine(zeroLength == "");

Console.WriteLine(empty == zeroLength);

Console.WriteLine(empty == "");

// 参照比較

Console.WriteLine((object)"" == (object)"");

Console.WriteLine((object)zeroLength == (object)"");

Console.WriteLine((object)empty == (object)zeroLength);

Console.WriteLine((object)empty == (object)"");


実行結果

【.NET Framework 2.0(Visual Studio 2005)の場合】

True
True
False
False
True
True
True
True
True
True
True
True
True
True
False
False

【.NET Framework 1.1(Visual Studio .NET 2003)の場合】

True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True


うーむ。なーぜーだーーー。

http://www.microsoft.com/japan/msdn/columns/drguinet/drguinet5_update.aspx

Dr.GUI .NET #5

.NET Framework における文字列


が参考になるかもしれないけど、古いかもしれない。
以下引用


文字列を比較するメソッド

2 つの文字列を比較するにはさまざまな方法があります。等価と非等価の比較では、2 つの文字列を参照によって比較するのか (同じオブジェクトを指しているかどうか)、または値によって比較するのか (同じ文字を格納しているかどうか) で大きな違いが生じます。

等価比較と関係比較でも、現在のカルチャの照合順序を使用するのか、それとも文字列にある各文字そのものの値に基づく順序を使用するのかでやはり大きな違いが発生します (大文字小文字を区別して比較するのかといった小さな違いもあります)。既定では、2 つの文字列が動作しているスレッドの現在のカルチャを使用し、大文字小文字は区別します。通常は、これがよく使用される比較方法です。

= 演算子は、String.Equals への呼び出しを生成します。String.Equals は、カルチャを区別し、さらに大文字小文字を区別する比較を行います。C# で参照比較を行う場合は、両方の文字列参照を Object にキャストするか、Object.ReferenceEquals を使用します。Visual Basic .NET では、次のように Visual Basic の Is 演算子を使用するか、Object.ReferenceEquals を使用します。Object.ReferenceEquals は、どちらの言語でも使用できることに注意してください。