参数前面的属性[NotNull]和[CanBeNull]分别有什么用?

张天星 2020-12-02 10:55:02
有一个方法是这样的:


public static void Main()
{
Test(null, null);
Test("a", "b");
}
public static void Test(
[NotNull] string test1,
[CanBeNull] string test2)
{

}

在传参里面,这两个属性是做什么用的呢?
我全部传入空值,或者全部不传入控制,在运行的时候,都不会报错,会正常的进入方法。。那这两个属性有什么意义。
...全文
1102 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztltgg 2021-02-19
  • 打赏
  • 举报
回复
是在 System.Diagnostics.CodeAnalysis 里面定义的 NotNull和CanBeNull特性吧,他是用于自己代码分析的,你要自己处理的话,那肯定有自己的逻辑,要自己写代码处理了。
siaoyuyu 2023-06-04
  • 举报
回复
@hztltgg 只有AllowNull没有CanBeNull啊。而且只能用在属性和字段上,
正怒月神 2021-02-19
  • 打赏
  • 举报
回复
我查了一下,这个在C#中并没有实现。 只是一个空的特性。 不过他貌似在R#中,可以使用。
张天星 2021-02-16
  • 打赏
  • 举报
回复
我平时会在方法里面写: if (test1 == null) throw new ArgumentNullException(nameof(test1)); 但现在,有办法用NotNull达到同样的效果么
张天星 2021-02-16
  • 打赏
  • 举报
回复
有人帮忙解答一下这个问题么,如果我需要在实体传参的时候,限制其不允许为空,要怎么做。 目前我这么写是无效的,缺少了一步处理,如果我自己去写处理,估计要在AOP中对参数进行判断。 但我想知道,DotNet既然提供了这个注解,那么有没有现成的对这个注解的处理方案?

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧