当前位置:  开发笔记 > 编程语言 > 正文

C#中的冗余?

如何解决《C#中的冗余?》经验,为你挑选了4个好方法。

请看以下代码段:

List distances = new List();

语言设计者是否打算实现冗余?如果是这样,为什么?



1> Jeffrey L Wh..:

代码看起来多余的原因是,对于新手程序员来说,它似乎是两次定义相同的东西.但这不是代码正在做的事情.它定义了两个恰好属于同一类型的独立事物.它定义了以下内容:

    名为distance of type的变量List.

    类型堆上的对象List.

考虑以下:

Person[] coworkers = new Employee[20];

这里非冗余更清晰,因为变量和分配的对象有两种不同的类型(如果对象的类型派生自或实现变量的类型,那么这种情况是合法的).



2> FlySwat..:

什么减少了这个?

List listOfInts = new List():

翻译成英文:(编辑,清理一点澄清)

创建List 类型的指针并将其命名为listofInts.

listOfInts现在已创建,但它只是一个指向无处的引用指针(null)

现在,在堆上创建一个List 类型的对象,并将指针返回给listOfInts.

现在listOfInts指向堆上的List .

当你想到它的作用时,并不是真的很冗长.

当然还有另一种选择:

var listOfInts = new List();

这里我们使用C#的类型推断,因为你立即分配它,C#可以确定你想要在堆中创建的对象创建什么类型.

要完全理解CLR如何处理类型,我建议阅读CLR Via C#.



3> Nescio..:

你总是可以说:

 var distances = new List();


利用类型推断并不是懒惰.
在这种情况下我总是会使用var!从呼叫站点的上下文中可以清楚地看到对象的类型.但是,在调用返回相同类型的函数时,我会避免使用var,因为读取器并不总是清楚返回值.
你可以,但你不应该!var关键字是为设计人员不知道返回的类型而编译器的情况设计的 - 就像linq中的动态类型一样.它不是为懒惰程序员设计的.
或者,接受类型推断.这是一个功能,它可供您使用.至少,所有*其他*语言的体育类型推断就是这种情况.此外,linq没有"动态类型".它包含一个名为"编译器生成的静态匿名类型"的非linq特性.

4> Jon Skeet..:

正如其他人所说:var消除冗余,但它有潜在的负面维护后果.我会说它也有潜在的积极意义维护后果.

幸运的是,Eric Lippert比我更有说服力地写了这篇文章:http ://csharpindepth.com/ViewNote.aspx?注意ID = 63 http://csharpindepth.com/ViewNote.aspx?NoteID=61

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有