【发布时间】:2010-12-04 05:03:26
【问题描述】:
在某些使用 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();
因为返回值只能是true。
【问题讨论】:
-
然而WaitOne的超载有一个超时参数,当超时到期时会返回false。
-
@Pop:这就是我的论点。也许你看错了。
-
@R.A.由于您没有使用返回值(始终为真),这意味着您忽略了它,但是在您的示例中也没有约定说“我故意忽略它”返回值总是可以忽略按照设计,所以不需要额外的解释。
标签: c# syntax return-value