我确信这很简单,但在使用新.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
来编译代码,但这似乎不对 - 我错过了什么?
答案 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
可以是int
或long
,所以默认情况下,编译器会在调用时返回Tuple<int, int>
:
Tuple.Create(1, 1)
这就是您遇到编译器错误的原因。因此,您需要使用通用版本明确进行转换:
Tuple.Create<long, long>(1, 1);