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.Createlong が期待されているため無効な引数があり、入力した数値が整数と見なされていることです。

この場合、それらは 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可能性があるため、デフォルトでは、コンパイラは次を呼び出すときに戻ります。intlongTuple<int, int>

 Tuple.Create(1, 1)  

そのため、コンパイラエラーが発生します。したがって、汎用バージョンを使用して明示的にキャストを作成する必要があります。

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