4
var t = new List<byte?[,]>();
var t2 = new byte?[4, 4][];

var r = new List<byte?[,]>(t);
var r2 = new List<byte?[,]>(t2); // error

C# のリストと配列はどちらも列挙可能であり、コレクションのコピーを作成するために列挙可能なオブジェクトからリストを構築できると思いました。

上記の例の最後の行の何が問題になっていますか?

コンパイル エラー: 'List.List(IEnumerable)' に最適なオーバーロードされたメソッドに無効な引数が含まれています。

4

2 に答える 2

3

t2が 2D 配列の配列である必要がある場合(リストの代入がそのように示唆している)、 の宣言t2が間違っています。あなたが後にいると思うなら:

var t = new List<int[,]>();
var t2 = new int[10][,];
for (int i = 0; i < t2.Length; ++i)
{
    t2[i] = new int[4, 4];
}

var r = new List<int[,]>(t);
var r2 = new List<int[,]>(t2); // no error!
于 2012-07-27T16:50:39.203 に答える
0

上記の例の最後の行の何が問題になっていますか?

new byte?[4, 4]t2 は2 次元配列の配列であり、r2 は 2 次元配列であるList of byte?[,]ため、この行はエラーをスローします。

var r2 = new List<byte?[,]>(t2); // error

list of byte?[,]したがって、解決策はこのようにaを渡します

var r2 = new List<byte?[,]>(new List<byte?[,]>());

また、t は、r2 で渡すことができるリスト内の一致する 2 次元配列です。

var r2 = new List<byte?[,]>(t);
于 2012-07-27T16:31:41.787 に答える