C# 中的 nodiscard 属性

ste*_*fan 7 c# attributes

我正在寻找一种方法,使方法的用户忽略方法的返回对象/值是非法的。在 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,但我真的不喜欢我的代码中的深层嵌套。

Mit*_*tch 2

[[nodiscard]]在 C#/.Net 中有两个类似物。第一个是命名不当的[Pure]属性,它最初是为了记录方法没有副作用。如果标记的方法的返回值[Pure]被丢弃,则会在编辑器中引发代码分析警告 CA1806 (但默认情况下不会在构建时引发)。

目前还正在进行添加该语言的工作[return: DoNotIgnore],但截至 2023 年 3 月,该工作仍在开发中。