私はこの署名を持つ関数を持っています:
public void DoSomething(String name);
私のアプリケーションでは、文字列nameは特別です。任意の文字列または特別な既知の値のいずれかです。空でない文字列値はすべて有効な入力であるため、次のように、空の文字列でオブジェクト参照の等価性を使用する必要があることを意味します。
public class Foo {
    public const String SpecialValue1 = "";
    public const String SpecialValue2 = "";
    public void DoSomething(String name) {
        if( Object.ReferenceEquals( name, SpecialValue1 ) ) {
        } else if( Object.ReferenceEquals( name, SpecialValue2 ) {
        } else {
        }
    }
    public void UsageExample() {
        DoSomething( SpecialValue1 );
        DoSomething( "some arbitrary value" );
    }
}
特に文字列のインターンに関して、空の文字列とオブジェクト参照の等価性を使用するこの手法が常に安全かどうかを知りたいです。