【发布时间】:2017-06-05 08:28:57
【问题描述】:
如果 T 是字符串,泛型类中的 == 和 Equals 有什么区别。
我准备了带有 2 个测试的示例代码。 TestMethod1 在第二次断言失败,但 TestMethod2 通过。
源代码:
[TestFixture]
public class Test
{
class Foo<T> where T : class
{
public static bool Foo1(T item1, T item2)
{
return item1 == item2;
}
public static bool Foo2(T item1, T item2)
{
return item1.Equals(item2);
}
}
[TestCase]
public void TestMethod1()
{
var name = "str" + 1;
// passes
Assert.IsTrue(Foo<string>.Foo2(name, "str1"));
// fails !
Assert.IsTrue(Foo<string>.Foo1(name, "str1"));
}
[TestCase]
public void TestMethod2()
{
// passes
Assert.IsTrue(Foo<string>.Foo2("str1", "str1"));
// also passes!
Assert.IsTrue(Foo<string>.Foo1("str1", "str1"));
}
}
【问题讨论】:
-
如果你写 var name = "str" + 1; 会发生什么?在测试方法 2 中,而不是使用实际的字符串
-
在您的第二个测试方法中,这些字符串文字将被实习,因此将是同一个对象。这可能是您正在观察的行为的一部分。
-
同样,第二次断言失败。 @Matt Jones 是的,知道这一点。
-
这些答案对您有帮助吗?