想象一下有人编写以下代码:
string s = "SomeString";
s.ToUpper();
我们都知道,在上面的例子中,调用“ToUpper()”方法是没有意义的,因为返回的字符串根本没有被处理。但是,许多人犯了这个错误,并花时间通过问自己“为什么我的‘s’变量上的字符没有大写”来解决问题????
那么,如果有一个属性可以应用于“ToUpper()”方法,如果不处理返回对象就会产生编译器错误,那不是很好吗?类似于以下内容:
[MustHandleReturnValueAttribute]
public string ToUpper()
{
…
}
如果为了让这段代码正确编译,用户必须像这样处理返回值:
string s = "SomeString";
string uppers = s.ToUpper();
我认为这会非常清楚您必须处理返回值,否则调用该函数没有意义。
在字符串示例的情况下,这可能不是什么大问题,但我可以想到其他更有效的理由来说明为什么这会派上用场。
大家怎么看?
谢谢。
最佳答案
调用一个方法是为了它的副作用,为了它的返回值,还是为了两者? “纯”函数(没有效果,仅用于计算返回值)最好这样注释,既可以消除您描述的错误类型,也可以启用一些潜在的优化/分析。也许再过 5 年我们就会看到这种情况。
(请注意,每当您隐式忽略返回值时,F# 编译器都会发出警告。当您想要显式忽略它时,可以使用 'ignore' 函数。)
关于C#编译器增强建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/628284/