gpt4 book ai didi

c# - 为什么 Assert.AreSame() 认为两个单独的字符串相同?

转载 作者:行者123 更新时间:2023-12-01 21:14:24 25 4
gpt4 key购买 nike

为什么会传递Assert.AreSame()

[TestMethod]
public void StringSameTest()
{
string a = "Hello";
string b = "Hello";

Assert.AreSame(a, b);
}

我理解 ìt 测试引用相等性,并且本质上与 Assert.IsTrue(object.ReferenceEquals(a, b)) 相同,但很明显 ab 是不同的字符串对象,无论它们具有相同的值。如果 Ì set string b = a; 我希望为 true,但事实并非如此。为什么这个测试没有失败?

谢谢

最佳答案

C# 编译器 will intern identical literal strings到相同的常量字符串引用。

所以你的代码相当于这样:

private const String _hello = "Hello";

[TestMethod]
public void StringSameTest()
{
string a = _hello;
string b = _hello;

Assert.AreSame( a, b ); // true
}

要创建与 const 字符串相同的单独字符串实例,请使用 String.Copy() :

string a = "Hello";
string b = a.Copy();

Assert.AreSame( a, b ); // false

但是,请注意:

  • String.Copy()String.Clone()是不同的!
    • Clone()实际上并不克隆字符串值,而是返回对其自身的引用。
    • String.ToString()还返回对其自身的引用。
  • String.Copy()在 .NET Framework 和 .NET Core 中已弃用,并且可能会在未来版本中删除。

参见Do string literals get optimised by the compiler?

关于c# - 为什么 Assert.AreSame() 认为两个单独的字符串相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com