gpt4 book ai didi

C#:如何实现和使用 NotNull 和 CanBeNull 属性

转载 作者:IT王子 更新时间:2023-10-29 03:57:25 25 4
gpt4 key购买 nike

我想让程序员和我自己知道,一个方法不需要null,如果您无论如何都向它发送null,结果将不会很好。

Lokad Shared Libraries 中有一个NotNullAttribute 和一个CanBeNullAttribute ,在 Lokad.Quality 命名空间中。

但是它是如何工作的呢?我查看了这两个属性的源代码,它看起来像这样:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter |
AttributeTargets.Property | AttributeTargets.Delegate |
AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
[NoCodeCoverage]
public sealed class NotNullAttribute : Attribute
{
}

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter |
AttributeTargets.Property | AttributeTargets.Delegate |
AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
[NoCodeCoverage]
public sealed class CanBeNullAttribute : Attribute
{
}

继承自 Attribute 的两个空类。它们是如何使用的?您是否必须查找 xml 文档并知道它在那里?因为我尝试制作我自己的属性副本并使用 Lokad 版本,但是当我尝试直接发送 null 时,我没有收到任何消息。既不是来自 ReSharper,也不是来自 VS。我实际上有点期待。但是它们是如何使用的呢?如果我尝试在其中发送 null 的内容,我可以以某种方式让 VS 为我生成警告吗?或者它只是用于某种测试框架?或者?

最佳答案

在中期,“代码契约(Contract)”(在 4.0 中)将是一个更好的答案。它们现在可用(使用 academiccommercial 许可证),但将更多地集成到 VS2010 中。这可以同时提供静态分析和运行时支持。

(编辑)示例:

Contract.RequiresAlways( x != null );

就这么简单......代码契约引擎在 IL 级别工作,因此它可以分析它并在构建期间或运行时从调用代码中抛出警告/错误。为了向后兼容,如果您有现有的验证代码,您可以只告诉它完整性检查在哪里结束,它会完成剩下的工作:

if ( x == null ) throw new ArgumentNullException("x");
Contract.EndContractBlock();

关于C#:如何实现和使用 NotNull 和 CanBeNull 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/792531/

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