在某些使用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();
}
Run Code Online (Sandbox Code Playgroud)
我发现这是一个公平的做法,首先是因为大多数编译器不会在这里产生警告,其次是因为它向未来的开发人员明确表明作者有意识地选择忽略回报.它使作者的思想痕迹不含糊.
据我所知,C#编译器不会抱怨隐式忽略的返回值,但我想知道是否有类似的约定用于向其他开发人员明确指示.
回答这里的一些人质疑这个约定的实际使用(或者它会显示糟糕的设计以使方法具有潜在的不重要的返回值).
一个真实的.NET示例(我可能应该从一开始就基于问题)是Mutex::WaitOne()不带参数的重载.只有在安全获取互斥锁时它才会返回,否则它永远不会返回.布尔返回值是针对其他重载的,您可能在返回时最终没有拥有互斥锁.
所以在我的推理中,我想在我的多线程代码中指出我已经选择忽略返回:
Mutex mtx = new Mutex();
(void)mtx.WaitOne();
Run Code Online (Sandbox Code Playgroud)
因为返回值永远不会是任何东西true.
我在该类中有一个类和一个方法.但是这个类方法返回一个字符串.当我调用类方法时,我没有得到错误,尽管我没有捕获字符串值返回.有没有办法可以让C#和.net强制我在返回值时捕获值.这是我的意思的一个例子.
1-创建一个班级考试.
class test
{
public string mystring() {
return "BLAH";
}
}
Run Code Online (Sandbox Code Playgroud)
2-从程序或其他类调用类方法
test mystring = new test();
mystring.mystring();
Run Code Online (Sandbox Code Playgroud)
我在Visual Studio工作时的编译器没有抱怨我没有捕获返回值.这是正常的还是我错过了什么.我可以强制编译器通知我该函数返回一个值,但我没有抓住它?
提前感谢您提出的任何建议.