c#-3.0 - C#中 'var'的邪恶之处?

标签 c#-3.0 anonymous-types

Possible Duplicate:
C# 'var' keyword versus explicitly defined variables

编辑:

对于那些仍在查看此内容的人,我已经完全改变了对 var 的看法。我认为这很大程度上是由于我对这个话题的回应。我现在是一个狂热的“var”用户,我认为它的支持者下面的评论在几乎所有情况下都是绝对正确的。我认为我最喜欢 var 的一点是它确实减少了重复(符合 DRY),并使您的代码相当干净。它支持重构(当你需要改变某些东西的返回类型时,你需要处理的代码清理工作就会减少,而且不是每个人都有一个花哨的重构工具!),而且有趣的是,人们似乎并没有真正的问题预先不知道变量的具体类型(按需“发现”类型的功能很容易,这通常是必要的,即使您确实知道类型的名称。)

因此,这里为 'var' 关键字热烈鼓掌!!

<小时/>

这是一个相对简单的问题……实际上更像是一个民意调查。我是 C# 的忠实粉丝,自 .NET 首次发布以来,我已经使用它超过 8 年了。我非常喜欢该语言的所有改进,包括 lambda 表达式、扩展方法、LINQ 和匿名类型。然而,我认为 C# 3.0 的一项功能被严重滥用了......“var”关键字。

自从 C# 3.0 发布以来,在博客、论坛,甚至 Stackoverflow 上,我已经看到 var 几乎取代了所有已编写的变量!对我来说,这是对该功能的严重滥用,并导致非常任意的代码,由于不清楚变量的实际类型,可能会出现许多令人困惑的错误。

“var”只有一个真正有效的用途(至少在我看来)。您问,什么是有效用途?唯一有效的用途是当您无法知道类型时,并且是唯一可能发生这种情况的情况:

访问匿名类型时

匿名类型没有编译时标识,因此 var 是唯一的选择。这是添加 var 的唯一原因......以支持匿名类型。

那么...你的意见是什么?鉴于 var 在博客、论坛上的大量使用,以及 ReSharper 等工具的建议/强制执行,许多崭露头角的开发人员将认为它是完全有效的。

  • 您认为 var 应该被如此频繁地使用吗?
  • 您认为 var 应该用于匿名类型以外的其他用途吗?
  • 在发布到博客的代码中使用以保持简洁...简洁是否可以接受? (我自己不确定这个答案......也许带有免责声明)
  • 作为一个社区,我们应该鼓励更好地使用强类型变量来提高代码清晰度,还是让 C# 变得更加模糊和缺乏描述性?

我想了解社区的意见。我看到 var 使用了很多,但我不知道为什么,也许有一个很好的理由(即简洁/简洁。)

最佳答案

var 是一个绝妙的主意,可以帮助实现良好编程的关键原则:DRY,即不要重复自己。

VeryComplicatedType x = new VeryComplicatedType();

是糟糕的编码,因为它重复了 VeryComplicatedType,而且效果都是负面的:代码更加冗长和样板化,可读性较差,对于代码的读者和编写者来说都是愚蠢的“makework”。因此,与 Java 和以前版本的 C# 相比,我认为 var 是 C# 3 中非常有用的增强功能。

当然,它可能会被轻微地误用,通过使用类型不清晰和明显的表达式作为 RHS(例如,调用其声明可能很远的方法)——这种误用可能会降低可读性(通过强制读者去寻找方法的声明或深入思考其他一些微妙的表达式的类型)而不是增加它。但如果您坚持使用 var避免重复,您将处于最佳位置,并且不会误用。

关于c#-3.0 - C#中 'var'的邪恶之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/902563/

相关文章:

c# - C# 中的字段和属性最佳实践

c# - .NET 3.0 或更高版本的套接字圣经

c# - 如何将变量从Windows应用程序传递到asp网站?

c# - 从值中获取键 - Dictionary<string, List<string>>

c# - IHttpActionResult 匿名对象 - 验证结果

C++ 在循环中创建和收集结构

c# - 文本模板中可以使用匿名类型吗?

javascript - 命名动态创建的 javascript 类型

c# - C# 可以让我的类看起来像另一个类吗?

c# - 在 C# 中将匿名类型转换为键/值数组?