我想让程序员和我自己知道一个方法不需要null,如果你确实发送null它,结果将不会很好.
有一个NotNullAttribute和CanBeNullAttribute在Lokad共享库,在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
{
}
Run Code Online (Sandbox Code Playgroud)
继承自的两个空类Attribute.它们是如何使用的?你需要查找xml文档并知道它在那里吗?因为我试图制作我自己的属性副本并使用Lokad版本,但是当我尝试直接发送null时,我没有收到任何消息.既不是来自ReSharper也不是来自VS. 实际上我有点期待.但他们是如何使用的呢?如果我尝试发送一些空的东西,我可以以某种方式让VS为我生成警告吗?或者它只是在某种测试框架中使用?要么?
我有一个永远不会返回null对象的方法.我想说清楚,以便我的API用户不必编写如下代码:
if(Getxyz() != null)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
我该如何展示这个意图?