【发布时间】:2020-02-05 08:21:38
【问题描述】:
我正在使用来自 C# 8 的新可空引用类型,我想知道如果方法返回,是否可以指示传入的参数不为空。
我找到了[NotNullIf] 和[DoesNotReturnIf],但它们似乎分别触发了方法的返回值和特定的bool 参数。
这是我目前拥有的:
public static bool RaiseIfNull([NotNullWhen(true)] object? thing) => RaiseIf(() => thing is null);
public static bool RaiseIf(Func<bool> predicate)
{
if (predicate()) throw new HttpException(400);
return true;
}
这看起来不错,但是当我调用它时 - 我仍然看到警告。 (我也试过RaiseIfNull([NotNullIfNotNull("thing")] object? thing),但没用。)
[HttpPost("{id}")]
public async Task Etc(string id, [FromBody] Dto data)
{
HttpException.RaiseIfNull(data?.property);
await DoEtc(id, data.property)); // warning here
}
我是否遗漏了一些明显的东西?
【问题讨论】:
-
这并不完全是您所需要的,但我认为值得注意的是,对于类型参数,有
where T : notnull约束。类型参数必须是不可为空的类型。参数可以是 C# 8.0 或更高版本中的不可为空的引用类型,也可以是不可为空的值类型。此约束也适用于任何类、接口、委托或数组类型。
标签: c# c#-8.0 nullable-reference-types