- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想让程序员和我自己知道,一个方法不需要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 中)将是一个更好的答案。它们现在可用(使用 academic 或 commercial 许可证),但将更多地集成到 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/
我最近发现您可以使用 [CanBeNull] C# 中的注解告诉 ReSharper(和其他插件)一个方法可以返回 null。这很棒,因为当我不处理这些情况时,它会让 ReSharper 提醒我。 但
我想让程序员和我自己知道,一个方法不需要null,如果您无论如何都向它发送null,结果将不会很好。 Lokad Shared Libraries 中有一个NotNullAttribute 和一个Ca
我正在经历将我的 .Net 4.8(不是 Core!)项目转换为使用新的 C# 8“可空引用”功能的过程。 为此,我通过添加 #nullable enable 依次更改每个源代码文件。并用 ? 修饰所
在我们的代码中,我们有自己的注入(inject)框架来启用依赖注入(inject),例如: public class MyClass { [Component("ComponentName1"
ReSharper 有一套代码注释,可用于显式表达 IDE 可以使用的代码意图。两个最有用的注释是 [CanBeNull] 和 [NotNull] 属性,它们可以用在构造函数、属性和方法上,如下所示:
考虑以下 C#.Net 代码: using System.Xml; internal class MyXmlReaderClass : XmlReader { private readonly
我是一名优秀的程序员,十分优秀!