【发布时间】:2022-01-22 09:40:10
【问题描述】:
我有几种方法总是检查“用户”类型的参数中的空值。 我不想多次编写这种模式,而是想利用 C# 属性。
public bool HasPendingBasket(User user)
{
if (user == null)
{
return false;
}
// Code ..
}
public void AddUser(User user)
{
if (user == null)
{
return;
}
// Code ..
}
// Many more methods like above
我想知道是否可以这样写:
public bool HasPendingBasket([NotNullReturn(false)] User user)
public void AddUser([NotNullReturn(null)] User user)
// Or
[NotNullReturn(false)]
public bool HasPendingBasket(User user)
[NotNullReturn(null)]
public void AddUser(User user)
我阅读了 Microsoft 文档,他们提到了
但是,您创建的任何属性仅充当元数据,并且不会导致属性类中的任何代码被执行。您可以在代码中的其他位置对元数据采取行动(本教程稍后会详细介绍)。
所以听起来属性不能做我正在寻找的东西,因为它只充当元数据。 不知我的理解是否正确。
如果是正确的,是否有更好的方法来进行空检查,而不必在任何地方编写该模式?
【问题讨论】:
-
你的理解是正确的。这些属性适用于代码分析器。
-
您使用的是什么版本的 .NET/C#?如果 .NET Core 3.1 和 C# 8 或更高版本使用可空支持:编译器会在传递可能为空或不可为空的内容时向您发出警告。
标签: c# .net attributes notnull