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

C#类型推断有多好?

如何解决《C#类型推断有多好?》经验,为你挑选了2个好方法。

C#类型推断有多好?我在某处读到它只适用于局部变量?它是否适用于类级属性?对于方法签名?方法返回类型?等等



1> Jon Skeet..:

C#中有几种主要的类型推断:

隐式输入的局部变量:

仅适用于局部变量

仅当值被指定为声明的一部分时

值不能为空

值不能是lambda表达式,匿名方法或方法组(没有强制转换)

该值的编译时类型用于变量的类型

变量的任何进一步使用仅根据初始声明+赋值确定的类型进行检查; 它们对推理本身没有贡献.

通用方法类型参数推断,即在调用泛型方法时不指定类型参数,编译器根据参数计算出它们.

对于泛型类型以及泛型方法来说,这非常方便

无论如何真的很方便 - 没有它就很难或不可能使用LINQ

没有它,匿名类型将毫无用处

规则真的很复杂,甚至规格在一些地方都是错误的

Lambda表达式参数类型推断

编译器尝试根据lambda表达式使用的上下文计算出lambda表达式的参数类型

根据我的经验,通常效果很好

数组类型推断,例如new[] { "Hi", "there" }代替new string[] { "Hi", "there" }

各种小限制,没什么大不了的

我可能已经忘记了一些其他可能被称为"类型推断"的功能.我怀疑你对第一个感兴趣,但其他人也可能与你相关:)



2> BFree..:

它只能用于局部变量,但它可以以多种不同的形式检测类型.

var myVar = SomeMethodThatReturnsInt(); //will know it's an int
var myIntList = new List(); //this works too (although this is technically not type inference)
var myOwnVar = new { Name = "John", Age = 100 }; // will create own type and infer that

编辑:Tye推理的另一个例子是Lambdas.IE:

var myList = new List();
//add some values to list

int x = myList.Find(i => i == 5); // compiler can infer that i is an int.


为什么第二个例子不是技术上的类型推断?
推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有