5.4.3.1 C# 3.0 中的类型推断

728 篇文章 1 订阅
349 篇文章 0 订阅

5.4.3.1 C# 3.0 中的类型推断

 

在 C# 中,值类型推断主要用 var 关键字表示,这是 C# 3.0 的新功能。我们前面已经看到,但通过清单 5.12 的几个例子,我们可以更详细地讨论一下。

 

清单 5.12 使用 var 关键字进行类型推断 (C#)

var num = 10 + (2 * 16);

var str = String.Concat(new string[]{"Hello ", "world!"});

var unk = null;    [1]  错误

 

类型推断机制是主要看赋值运算符的右边,得出表达式的类型。即使不使用 var,也要这样做,以确保要赋给的变量与要赋的值相兼容。示例的最后一行[1],C# 编译器无法推断类型,报告错误消息。文字 Null 可以隐式转换成任何 .NET 引用类型(甚至是可空的值类型),而它本身并不是真正的 .NET 类型。编译器不知道我们想给变量 unk 哪种类型,因此,必须显式指定类型。我们早先在 option 类型中使用过 var 关键字,那么,就来详细分析几个示例:

 

var s1 = Option.Some<int>(10);

var s2 = Option.Some(10);

var n1 = Option.None<int>();

var n2 = Option.None();

 

第一和第三行并出人意料,我们调用泛型方法,并显式指定了类型参数值,因此,编译器可以推断出返回类型;第二行,我们没有为方法指定类型参数值,但编译器知道第一个参数值的类型必须与类型参数值兼容,因此,正确推断出要创建的值类型为Option<int> 2;最后一行,会报错“不能从方法 '… ' 的用法推断出它的类型参数。”这是因为,在这里,编译器没有足够的线索,知道应该是什么类型。

在 C# 中的类型推断在很多方面都是有限制的,但仍然非常有用;在 F# 中,算法更智能,能够推断出更多的类型。下面,我们看一些 F# 示例。

 

5.4.3.2 F# 中的类型推断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值