在常用的实用函数中将void返回类型更改为其他内容会有什么危害吗?

ant*_*ell 5 c#

如果我有一个像这样的功能

public void usefulUtility(parameters...) { 
    string c = "select * from myDB";
    do_a_database_call(c);
}
Run Code Online (Sandbox Code Playgroud)

在很多地方使用过的,将它更改为:

public bool usefulUtility(parameters...) { 
   string c = "select * from myDB";
   bool result = do_a_database_call(c);
   return result;
}
Run Code Online (Sandbox Code Playgroud)

这可能会破坏任何代码吗?

我什么都想不到......但它有可能吗?

Ser*_*rvy 3

是的,实际上您可能做的任何影响公共界面的事情都是破坏性的改变。它可能足够小,以至于您不关心,并且没有人或几乎没有人实际上会碰巧遇到极端情况,但埃里克·利珀特(Eric Lippert)解释说,有一些极端情况(其中许多涉及类型推断)甚至可能导致这些看似无害的改变就被打破了。

对于您的特定示例,此代码将因该更改而被破坏。

Action a = usefulUtility;
Run Code Online (Sandbox Code Playgroud)

  • 显然我不是唯一一个在脑海中保留着利珀特帖子目录的人。@jp2code 在这种情况下,他没有调用有用的实用程序方法,他将其保存为 Action 方法的委托,这会因为委托定义已更改而中断。 (2认同)