fin*_*ook 1 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
Run Code Online (Sandbox Code Playgroud)
错误是Tuple.Create具有无效参数,因为它期望长,并且我放入的数字被视为整数.
在这种情况下,是的,它们在int的范围内,但它们有时可能具有对于int而言太大的值.
我可以强制(long)1转换代码来编译,但这似乎不对 - 我错过了什么?
Chr*_*ian 10
使用L后缀指定您希望您的数字类型为long:
test.Add(1, Tuple.Create(1L, 2L));
Run Code Online (Sandbox Code Playgroud)
如果没有后缀,.NET会假定这些数字为ints,从而创建Tuple<int, int>实例而不是所需的实例Tuple<long, long>.
您的代码是等效的:
Tuple<long, long> yourTuple = Tuple.Create(1, 1);
Run Code Online (Sandbox Code Playgroud)
但是,因为1可以是int或者long,所以默认情况下,编译器会Tuple<int, int>在调用时返回:
Tuple.Create(1, 1)
Run Code Online (Sandbox Code Playgroud)
这就是你得到编译器错误的原因.因此,您需要使用通用版本明确进行转换:
Tuple.Create<long, long>(1, 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |