在C#Tuple中使用Int64

时间:2013-02-04 12:16:31

标签: c# generics tuples

我确信这很简单,但在使用新.Create()类的Tuple方法时出现编译错误。

Dictionary<long, Tuple<long, long>> test = new Dictionary<long, Tuple<long, long>>();
test.Add(1, Tuple.Create(1, 2)); // <-- compiler error

错误是Tuple.Create具有无效参数,因为它期望长,并且我输入的数字被视为整数。

在这种情况下,是的,它们在int的范围内,但它们有时可能对int来说值太大。

我可以投射(long)1来编译代码,但这似乎不对 - 我错过了什么?

2 个答案:

答案 0 :(得分:10)

使用L suffix指定您希望您的号码为long类型:

test.Add(1, Tuple.Create(1L, 2L));

如果没有后缀,.NET会假定这些数字为int,因此会创建Tuple<int, int>个实例,而不是所需的Tuple<long, long>

答案 1 :(得分:8)

您的代码是等效的:

Tuple<long, long> yourTuple = Tuple.Create(1, 1);

但是,因为1可以是intlong,所以默认情况下,编译器会在调用时返回Tuple<int, int>

 Tuple.Create(1, 1)  

这就是您遇到编译器错误的原因。因此,您需要使用通用版本明确进行转换:

Tuple.Create<long, long>(1, 1);