C#编译器增强建议

标签 c# .net

想象一下有人编写以下代码:

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/

相关文章:

c# - MVC TempData 传递给 Jquery

c# - 在 C# 中将 TransactionScope 与数据库一起使用

.net - 忽略 DataContractSerializer 中的字段顺序

c# - uwp 页面根本不触发 keydown 事件

c# - 模态消息框线程问题

c# - 在表格的列标题处插入间距

c# - 存储和访问常见字符串文字的最佳实践

c# - 如何在不将页面加载到浏览器的情况下刷新页面?

php - 如何对动态业务对象/数据进行版本控制?

c# - 如何为以下条件创建正则表达式?