3

何百もの行と多くの列を持つ DataTable があります。列の 1 つは「ImageThumbnail」フォームの 1 つのコントロールにサムネイルを表示したいです。このコントロールは、イメージ ソースとして「ImageList」を想定しています。したがって、データセットの「ImageThumbnail」列から ImageList コントロールに値を入力するのが好きです。DataTable のすべての行をループすることでそれを行うことができましたが、効率的な方法が必要だと思います。

4

1 に答える 1

0

DataColumn自分でこれをすばやく試した後、効率的な方法でシングルから値を取得しようとすることに要約されるように思えます。これに気付いた後、2つの解決策を提案するこの投稿を見つけました。これらをテストに適用し、ImageLists以下のコードを含めました。

DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Image", typeof(Image));

dt.Rows.Add("Img1", Properties.Resources.Img_1);
dt.Rows.Add("Img2", Properties.Resources.Img_2);
dt.Rows.Add("Img3", Properties.Resources.Img_3);
dt.Rows.Add("Img4", Properties.Resources.Img_4);

ImageList imgList = new ImageList();

//// Loop Approach:
//for (int idx = 0; idx < dt.Rows.Count; idx++)
//{
//    imgList.Images.Add(dt.Rows[idx]["Image"] as Image);
//}

// LINQ Approach:
imgList.Images.AddRange(dt.Rows.Cast<DataRow>().Select(row => row["Image"] as Image).ToArray());

私の意見では、LINQ アプローチの方が簡潔ですが、おそらくループ アプローチの方が理解しやすく、読みやすいと思います。これらのどちらがより効率的であるか、または両方が同様の IL コードになるかどうかはわかりません。ただし、LINQ アプローチは、AddRange効率ToArrayの向上を含む可能性がある (または将来的に行う可能性がある) 組み込みメソッドを使用します。

于 2014-05-13T13:52:28.280 に答える