【发布时间】:2022-12-07 06:09:14
【问题描述】:
如果字符串为空/空/空白,我有一些验证代码会抛出异常。我希望它在函数返回后向空检查系统发出信号,表明 argument 不为空。
void ThrowIfNullEmptyOrBlank(string? argument, string paramName)
=> ThrowIf(Check.Null & Check.Empty & Check.Blank, argument, paramName);
[return: NotNull] void ThrowIfNullEmptyOrBlank(string? argument, string paramName) 不对,因为我的方法没有返回值(我想我可以改变它,但这样更干净)。
void ThrowIfNullEmptyOrBlank([param: NotNull] string? argument, string paramName) 似乎也没有做到这一点。
有可能做我正在尝试的事情吗?
【问题讨论】:
-
怎么样: string ThrowIfNullEmptyOrBlank(string? argument, string paramName) { ThrowIf(Check.Null & Check.Empty & Check.Blank, argument, paramName);返回参数; } 。编译器会知道输出不为空,您可以使用它
-
Dotnet 使用 MaybeNullWhenAttribute,但这是内部的
-
第一个建议要求调用者将
argument设置为此调用的结果,以便传播类型数据;我宁愿不依赖人们记得这样做。 -
您可能需要考虑将“检查”值的逻辑与“抛出”分开。
IsNullOrWhitespace也已经存在,它使用[NotNullWhen],它之所以有效,是因为Is...方法返回一个布尔值。