halt")?-6ren"> halt")?-看来NotNull和 ContractAnnotation("key: null => halt")它们对 R# 的影响非常相似。有什么我想念的吗?我应该总是同时申请吗? 最佳答案 它们非常相似,但在-6ren">
gpt4 book ai didi

null - 我应该同时使用 NotNull 和 ContractAnnotation ("null => halt")?

转载 作者:行者123 更新时间:2023-12-04 21:57:26 24 4
gpt4 key购买 nike

看来NotNullContractAnnotation("key: null => halt")它们对 R# 的影响非常相似。有什么我想念的吗?我应该总是同时申请吗?

最佳答案

它们非常相似,但在语义上非常不同。
NotNull声明目标不为空,但没有说明后果。可能有一个空检查会抛出 ArgumentNullException ,或者它可能不检查就直接使用它,并且您可以获得运行时 NullReferenceException .同样,应用程序可能会检查 null,记录它并安全地继续。
ContractAnnotation("key: null => halt")告诉 ReSharper 如果 key参数为空,则程序流程终止。 ReSharper 可以像这样使用它:

string foo = null;
Assert.NotNull(foo); // ContractAnnotation("null => halt")
Assert.Equal(12, foo.length);

此代码段中的第二个断言将被标记为死代码,因为 ReSharper 知道第一个断言在传递空值时会抛出。

但是,如果 Assert.NotNull刚刚标有 NotNull属性,然后 ReSharper 将突出显示 foo带有警告的参数,告诉您不应传递空值,但它不知道如果这样做会发生什么。

微妙,但不同。我会坚持使用 NotNull属性,如果您要求值永远不会为空,请使用 ContractAnnotation("null => halt")对于断言样式方法,如果传递空值,该方法肯定会显式抛出。

关于null - 我应该同时使用 NotNull 和 ContractAnnotation ("null => halt")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23984569/

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