微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# – 如何指定何时有意忽略返回值

在某些使用C/C++的情况下,我可以通过语法来指示编译器有意忽略一个返回值:
int SomeOperation()
{
    // Do the operation

    return report_id;
}

int main()
{
    // We execute the operation,but in this particular context we
    // have no use of the report id returned.
    (void)SomeOperation();
}

我认为这是一个公平的做法,首先是因为大多数编译器在这里不会产生警告,其次是因为它明确地向未来的开发人员展示了作者做出了粗略的选择来忽略这个回报.这使得作者的思想道路不含糊.

据我所知,C#编译器不会抱怨隐含忽略的返回值,但是我想知道是否有类似的约定用于向其他开发人员提供明确的指示.

编辑:

为了回应这里的一些人对这个惯例的实际使用提出质疑(或者说它会显示不好的设计来拥有一个可能不重要的返回值的方法).

一个现实生活的.NET示例(我可能应该从一开始就提出这个问题)是Mutex :: WaitOne()重载,它没有参数.如果互斥体安全地获取,它将返回,否则它永远不会返回.布尔值返回值用于其他重载,当您返回时可能最终不会拥有互斥体.

所以按照我的推理,我想在我的多线程代码中指出,我已经选择忽略了返回:

Mutex mtx = new Mutex();
(void)mtx.WaitOne();

由于回报率绝对不能是“真实”.

解决方法

我只能想到一种情况,当C#中不允许忽略“返回值”时:发生错误时.这应该是通过抛出异常来提供的,这使得它不可能被忽略.

在其他情况下,它(或更好:必须)完全安全,并且根本不臭,忽略返回值.

编辑:

我还是看不到这一点.为什么要改善代码?您指定通过不将其分配给变量来忽略返回值.

>如果你的代码中不需要这个值,一切都很好.
>如果需要,您将无法编写代码.
>如果有一个特殊情况必须被处理,绝对不能被隐式忽略,应该抛出异常.
>如果被调用方法没有一个返回值并且稍后再获取一个,那么它必须设计为不会破坏忽略它的现有代码.现有的呼叫代码不变.

我忘了一个案子吗?

原文地址:https://www.jb51.cc/csharp/93393.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐