从IList

时间:2015-04-30 08:39:24

标签: c# windows winforms

我在Windows应用程序中使用ImageListView dll,我需要从IList中选择最后一个索引值。

我现有的工作代码

var items = ((flag == 1) ? (IList<ImageListViewItem>)imageListView1.Items : (IList<ImageListViewItem>)imageListView1.SelectedItems);

foreach (ImageListViewItem item in items)
{
  ...
}

我正在尝试使用以下代码从IList中选择第一个值

var items = ((flag == 1) ? (IList<ImageListViewItem>)imageListView1.Items : (IList<ImageListViewItem>)imageListView1.SelectedItems[0]);

foreach (ImageListViewItem item in items)
{
  ...
}

如果我尝试上面的代码我得到以下错误 “附加信息:无法将类型为'Manina.Windows.Forms.ImageListViewItem'的对象强制转换为'System.Collections.Generic.IList`1

2 个答案:

答案 0 :(得分:1)

问题是您正在尝试将ImageListViewItem投放到IList<ImageListViewItem>。如果你想坚持合同,你需要创建一个包含这个项目的新列表。

我认为三元运算符和大量的转换在这里损害了可读性,所以如何使用辅助方法:

private IList<ImageListViewItem> GetItems(int flag)
{
    IList<ImageListViewItem> items;

    if (flag == 1)
    {
        items = imageListView1.Items
    }
    else
    {
        items = imageListView1.SelectedItems.Take(1).ToList();
    }

    return items;
}

当没有当前选择的项目而不是抛出异常时,这也将确保返回空列表。

答案 1 :(得分:0)

也许你想做这样的事情:

foreach (ImageListViewItem item in imageListView1.SelectedItems)
{
   //Use you item here.
  ...  
  //In case flag is raised - break the loop after firs item use.
  if(flag == 1)
    break;
}