我是C#的新手,此时我无法理解的一件事是,为什么类型需要写两次,即
Dictionary<string, string> Lines = new Dictionary<string, string>();
为什么它不能简单,比如:
Lines= new Dictionary<string, string>();
// or
Dictionary<string, string> Lines = ();
并不是所有关于&#34;线&#34;变量?它可能会容易得多。
答案 0 :(得分:3)
如果这是方法中的代码,那么这就是自C#3.0以来the var
keyword已经存在的原因:
var Lines = new Dictionary<string, string>();
如果这是在类声明中,则您不能使用var
关键字。我承认不知道为什么在类级别不允许隐式类型的细节,但足以说它不是。需要显式输入:
private Dictionary<string, string> Lines;
从该声明中完全分离将是该变量的初始化。哪个可以在同一行,构造函数或方法等中完成。但任何new
关键字本身都需要明确告知类型:
new Dictionary<string, string>()
这两个完全不同的东西都要求为自己的离散和非常好的理由指定类型。
最终,只要你问“为什么语言不这样做?”你应该真正要问的是“应该语言这样做吗?这真的有必要吗?”
正如埃里克·利珀特曾对我说过in a previous question:“通过消除[那种不必要的特征],[那些不必要的特征]的规则都不需要通过,争论,设计,指定,实施,测试,记录,发送给客户,或与C#的所有未来功能兼容。“
很容易从看台上喊出来。设计和支持主要编程语言并不容易。也许有一天这个功能会存在,欢迎您向团队提出建议。但至于“为什么不存在”,团队根本就没有做到这一点。
答案 1 :(得分:2)
这样做是因为变量的类型可能与它引用的类的类型不同;考虑
ICustomer customerInterface = new CustomerConcreteClass();
有很多这样的案件;这使程序员能够定义与Type交互的范围,因为Type可以有多组范围(由声明的接口定义)。
通过询问“我为什么要定义这两次”,你隐含地将你的编程限制在你正在使用和声明一个具体类的单个案例中。即使在这种情况下,您的代码也执行两个函数 - 声明使用范围,并为变量分配新的具体类。它看起来好像你正在做两次工作,但实际上你正在执行两个单独的编码任务。
答案 2 :(得分:1)
这就是您拥有var
关键字的原因:
var Lines = new Dictionary<string, string>();
它允许您只指定一次新变量的类型,因为编译器足够聪明,可以找出该变量的tipe。一些人认为它使代码不清楚,因为有时它首先隐藏变量的类型:
var data = GetData();
你可以利用它,但要明智。