想象一下有人编写以下代码:
string s = "SomeString"; s.ToUpper();
我们都知道在上面的例子中,对"ToUpper()"方法的调用没有意义,因为根本不处理返回的字符串.但是,很多人犯了这个错误,花时间试图解决问题所在,问自己"为什么不是我的'变量上的字符大写"?
因此,如果有一个属性可以应用于"ToUpper()"方法,如果不处理返回对象会产生编译器错误,那么这不是很好吗?类似于以下内容:
[MustHandleReturnValueAttribute] public string ToUpper() { … }
如果要正确编译此代码,则用户必须处理返回值,如下所示:
string s = "SomeString"; string uppers = s.ToUpper();
我认为这将清楚地表明你必须处理返回值,否则调用该函数是没有意义的.
在字符串示例的情况下,这可能不是什么大问题,但我可以想到其他更合理的原因,为什么这会派上用场.
你们有什么感想?
谢谢.
是否会为其副作用,返回值或两者调用方法?"纯粹"函数(没有任何影响,仅用于计算返回值)将很好地进行注释,既可以消除您描述的错误类型,也可以实现一些潜在的优化/分析.也许再过5年我们就会看到这种情况发生.
(请注意,只要您隐式忽略返回值,F#编译器就会发出警告.当您想要显式忽略它时,可以使用'ignore'函数.)
如果您有Resharper,它将为您突出显示此类内容.不能推荐resharper足够高,它有很多有用的IDE添加,特别是在重构.
http://www.jetbrains.com/resharper/