3.2.2.1 更好地推断 C# 元组类型

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

3.2.2.1 更好地推断 C# 元组类型

 

在继续之前,我们想展示了一个 C# 的技巧,它能使后面使用元组的示例更简明。在前面的示例中,我们必须调用构造函数,创建元组类型的实例,这就要求显式指定类型参数。我们用 C# 3.0 中新的 var 关键字,C# 编译器能够推断变量的类型,但是,我们还可以做得更好。

C# 中还有另外一个地方支持类型推断:调用泛型方法。如果调用泛型方法,它的类型参数用作方法参数的类型,那么,编译器就能够在这个方法被调用时,使用方法参数的编译时类型,来推断类型参数3。为了阐明这一点,让我们看看清单 3.8。

 

清单 3.8 实现元组的类型推断 (C#)

 

public static class Tuple {

 public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2item2) {

   return new Tuple<T1, T2>(item1, item2);

  }

}

var prague =Tuple.Create("Prague", 1188000); |  [1]

var seattle =Tuple.Create("Seattle", 582000);  |

 

清单 3.8 实现了一个静态方法 Create,它有两个泛型参数,且用这些类型的值创建元组。我们需要把这个方法放在非泛型类中,否则,就必须显式指定泛型参数。幸运的是,C# 能够使用 Tuple 名字,因为类型可以按照类型参数的数量重载(Tuple 和 Tuple<T1, T2> 是两个不同的类型)。在 System 命名空间中也有这个类,你可能不会感到惊讶,因此,如果正在使用 .NET 4.0,可不必自己实现。

方法的主体很简单:唯一的目标就是能够通过调用方法,而不是构造函数,来创建元组。这样,C# 的编译器就能使用类型推断[1]。调用泛型方法的完整语法,包括了类型参数,因此,完整的语法,必须写成 Tuple.Create<string,int>(...)。在下一节,我们将讨论编写计算元组的代码,因为,我们已经用 C# 实现了元组类型,那么就从 C# 版本的代码开始,然后,再转到 F# 版本。

 

----------

[3] 我对这一句中“类型参数”、“方法参数”,等等,引起的混乱,真诚的道歉。但是,规范定义的术语,不允许优美的散文。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值