gpt4 book ai didi

c# - Assert.IsNotNull(·) Assert.AreNotEqual(null,·) 之间是否存在功能差异?

转载 作者:行者123 更新时间:2023-11-30 22:14:55 24 4
gpt4 key购买 nike

Assert.IsNotNull(·) Assert.AreNotEqual(null,·) 之间是否存在功能差异?

我更喜欢第一个,因为它更具可读性。一位同事使用了第二种,我想知道是否也存在功能差异。我知道将对象与 null 进行比较有时会很奇怪(.Equals== 之间的区别)。

最佳答案

简短的回答是

长答案涉及查看实际的源代码。我使用反编译器检索了它,所以其中一些看起来有点奇怪。评论是我加的。

// The IsNotNull overload that takes only "value" calls this one internally
public static void IsNotNull(object value, string message, params object[] parameters)
{
if (value != null)
return;
Assert.HandleFail("Assert.IsNotNull", message, parameters);
}

// The AreNotEqual that takes only "notExpected" and "actual" calls this one internally
public static void AreNotEqual<T>(T notExpected, T actual, string message, params object[] parameters)
{
if (!object.Equals((object) notExpected, (object) actual))
return;
Assert.HandleFail("Assert.AreNotEqual", (string) FrameworkMessages.AreNotEqualFailMsg(message == null ? (object) string.Empty : (object) Assert.ReplaceNulls((object) message), (object) Assert.ReplaceNulls((object) notExpected), (object) Assert.ReplaceNulls((object) actual)), parameters);
}

==Equals 之间确实存在差异,但与 null 进行比较时应该没有差异。如您所见,AreNotEqual 将输入值转换为 object 并在 object 上使用标准静态 Equals 实现类,具体实现如下:

public static bool Equals(Object objA, Object objB) 
{
if (objA==objB) {
return true;
}
if (objA==null || objB==null) {
return false;
}
return objA.Equals(objB);
}

在我看来,IsNotNullAreNotEqual更清晰,断言失败时if给出的错误信息可能更容易一目了然。

关于c# - Assert.IsNotNull(·) Assert.AreNotEqual(null,·) 之间是否存在功能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18250740/

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