.NET 似乎不遗余力地使值相等的字符串通过引用相等。
在 LINQPad 中,我尝试了以下方法,希望它能绕过内部字符串常量:
var s1 = new string("".ToCharArray());
var s2 = new string("".ToCharArray());
object.ReferenceEquals(s1, s2).Dump();
但这会返回true
。但是,我想创建一个string
可以可靠地区分于任何其他对象的string
对象。
(用例是创建一个用于可选参数的哨兵值。我正在包装 WebForms' Page.Validate()
,我想根据调用者是否给我可选的验证组参数来选择适当的重载。所以我希望能够检测调用者是否省略了该参数,或者他是否传递了一个恰好等于我的默认值的值。显然还有其他不那么神秘的方法来处理这个特定的用例,这个问题的目的更具学术性。),