以下是我的测试案例。两个字符串都是不同的对象,但我的测试用例通过了。

我期望他们失败。因为它们是不同的对象。

 string string1 = "Hello World";
    string string4 = "Hello World";
    Assert.AreSame(string1, string4);//Will return true
    Assert.IsTrue(object.ReferenceEquals(string1,string4));

最佳答案

编译器将为相等的硬编码字符串创建一个“对象”。

但是,如果您动态创建字符串

var string1 = "Hello World";
var name = "World";
var string2 = "Hello " + name;
Assert.AreSame(string1, string2); //Will return false
Assert.IsTrue(object.ReferenceEquals(string1,string2)); // Fail
Assert.AreEqual(string1, string2); // Pass


String.Intern Method (String)


  公共语言运行时通过维护一个
  表,称为内部池,其中包含对
  在其中以编程方式声明或创建的每个唯一文字字符串
  您的程序。因此,带有
  特定值在系统中仅存在一次。

关于c# - 字符串引用检查在我的单元测试中返回true,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45071870/

10-13 09:23