3

我有一个 DataTable,它有一百行和很多列。其中一列是 - “ImageThumbnail” 我想在表单上的一个控件中显示缩略图。此控件需要一个“ImageList”作为其图像源。所以我喜欢我的 ImageList 控件从数据集的“ImageThumbnail”列中填充。我可以使用循环遍历 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 方法使用AddRangeToArray内置方法,这些方法可能包括效率改进(或将来可能会这样做)。

于 2014-05-13T13:52:28.280 回答