1

我确信这很简单,但是在使用.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转换以编译代码,但这似乎不对 - 我错过了什么?

4

2 回答 2

10

使用L后缀指定您希望您的号码是类型long

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

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

于 2013-02-04T12:19:14.413 回答
8

您的代码是等效的:

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

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

 Tuple.Create(1, 1)  

这就是你得到编译器错误的原因。因此,您需要使用泛型版本显式进行强制转换:

Tuple.Create<long, long>(1, 1);
于 2013-02-04T12:19:01.807 回答