首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >var关键字的意义是什么?

var关键字的意义是什么?
EN

Stack Overflow用户
提问于 2008-10-16 15:59:55
回答 9查看 19.9K关注 0票数 49

var关键字消除了显式类型声明的需要,我很感兴趣地阅读了SO discussion,它可能是合适的。

我还读到过(但没有用过) Boo,它似乎更进一步,把它变成了optional to declare a local variable。使用Boo,类型和声明都可以隐含。

这让我想知道,为什么C#语言的设计者要费心去包含一个var关键字呢?

更新:是的,var支持匿名类型,但是匿名类型本身并不需要使用var关键字...

代码语言:javascript
复制
var anon = new { Name = "Terry", Age = 34 };

对比

代码语言:javascript
复制
anon = new { Name = "Terry", Age = 34 };
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-10-16 16:12:17

更新:实际上这里有两个相关的问题: 1.为什么我必须声明变量? 2.在一种让你声明变量的语言中,"var“有什么用处?

(1)的答案很多,可以在其他地方找到这个问题的答案。我对(2)的答案如下:

正如其他评论者所说,LINQ将此用于其匿名类型。然而,LINQ实际上是一个更一般问题的实例,在这个问题中,表达式右侧的类型对于程序员来说要么是未知的,要么是极其冗长的。考虑一下:

代码语言:javascript
复制
SomeGeneric<VeryLongTypename<NestedTypename>> thing = new   
SomeGeneric<VeryLongTypename<NestedTypename>>();

冗长且容易出错,对吧?所以现在他们允许你这样做:

代码语言:javascript
复制
var thing = new SomeGeneric<VeryLongTypename<NestedTypename>>();

通过减少信息的重复,消除了错误。注意,这里不仅仅是输入错误:左侧表达式的类型有可能被错误地键入,以至于编译器可以从左到右进行静默转换,但转换实际上丢失了rvalue的某些属性。当rvalue返回的类型可能是未知的或匿名的时,这一点更加重要。

票数 46
EN

Stack Overflow用户

发布于 2008-10-16 16:04:36

如果没有var关键字,就有可能意外地创建了一个新变量,而实际上您本打算使用一个已经存在的变量。例如:

代码语言:javascript
复制
name = "fred";
   ...
Name = "barney"; // whoops! we meant to reuse name
票数 48
EN

Stack Overflow用户

发布于 2009-04-29 22:27:09

我理解使用var的必要性,它为它提供了很好的服务。没有关键字,只是在没有类型的情况下动态定义变量,这是可怕的。你伤害了下一个不得不维护你的代码的人,或者你自己,如果你需要重写你一年多没有接触过的代码。我不确定这是不是应该在C#中打开的一扇门,我希望它不会,因为在不必要的情况下过度使用var已经导致了可读性问题。

我最近看到的几乎每个.net 3.5示例都使用var定义了所有变量。

我的论点是,当它被过度使用时,为了节省击键次数,它确实牺牲了可读性。例如:

代码语言:javascript
复制
// What myVar is, is obvious
SomeObject myVar = new SomeObject();

// What myVar is, is obvious here as well
var myVar = new SomeObject();

我看到的问题是,人们到处都在使用它。例如:

代码语言:javascript
复制
// WTF is var without really knowing what GetData() returns?
// Now the var shortcut is making me look somewhere else when this should
// just be readable!
var myVar = GetData();

// If the developer would have just done it explicitly it would actually
// be easily readable.
SomeObject myVar = GetData();

因此,下一个论点将是,只需更好地命名函数...

代码语言:javascript
复制
var weight = GetExactWeightOfTheBrownYakInKilograms();

仍然不知道会有什么东西回来。它是int、decimal、float、weight对象,还是什么?我还是要浪费时间去查...我需要使用intellisense拐杖来拯救我的懒惰编程。可以在函数名中包含返回类型。好主意,现在使用var除了让我的所有函数都有真正的长名称之外,什么也没有节省。

我认为人们只是过度使用var,这导致了懒惰的编程,这反过来又导致更难阅读代码。每次键入关键字var时,都应该有一个很好的理由来说明为什么要使用它,而不是显式地使用它。

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/209199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档