我有這個簽名的函數:是一個字符串引用相等檢查保證是靜態的嗎?
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");
}
}
我想,如果這種技術,使用空字符串和將對象引用相等知道總是很安全,特別是在串線實習方面。
你有甚至嘗試'的ReferenceEquals(SpecialValue1,SpecialValue2)'?直接出現在源代碼(以及其他字符串,通過一些算法)中的跺跺[string interning](http://en.wikipedia.org/wiki/String_interning)。所以這與例如'public static readonly object SpecialValue1 = new object(); public static readonly object SpecialValue2 = new object();'。 –
接受對象或枚舉的重載是正確的方法。 –