我正在寻找一种方法,使方法的用户忽略方法的返回对象/值是非法的。在 C++ 中,这可以通过[[nodiscard]]属性实现。但是,我在 C# 中找不到类似的属性。是否有此类属性的标准实现或有关如何实现此行为的约定?
作为一个例子,为什么这可能有用(并且异常不是一种合适的方法是:
public void foo()
{
if (condition)
{
DoSomeFinalThing();
return;
}
if (othercondition)
{
DoSomeOtherFinalThing();
// whoops, forgot to return here. Common mistake...
}
DefaultAction();
}
Run Code Online (Sandbox Code Playgroud)
是的,这也可以用 来完成else,但我真的不喜欢我的代码中的深层嵌套。
[[nodiscard]]在 C#/.Net 中有两个类似物。第一个是命名不当的[Pure]属性,它最初是为了记录方法没有副作用。如果标记的方法的返回值[Pure]被丢弃,则会在编辑器中引发代码分析警告 CA1806 (但默认情况下不会在构建时引发)。
目前还正在进行添加该语言的工作[return: DoNotIgnore],但截至 2023 年 3 月,该工作仍在开发中。