2015-04-30 49 views
0

我在Windows應用程序中使用ImageListView DLL,我需要從IList中選擇最後一個索引值。從IList選擇特定列表

我現有的工作代碼

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

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

我嘗試使用下面的代碼

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

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

如果我在上面的代碼試圖選擇自IList的第一個值我有以下錯誤 「其他信息:無法投射'Manina.Windows.Forms.ImageListViewItem'類型的對象以鍵入'System.Collections.Generic.IList`1

+0

嘗試改變'VAR項目=((標誌== 1)(IList的)imageListView1.Items:(IList的)imageListView1 (IList );(IList )new [] {imageListView1.SelectedItems [0]});} to'var items =((flag == 1)? ;' –

+0

看着你的錯誤,它看起來像一個演員異常。我不確定你想要做什麼,但我會說錯誤在你的演員中。即'(IList )imageListView1.SelectedItems' – user1

+0

這裏的目標是什麼?您正嘗試選擇一個項目,但您也希望能夠遍歷一個列表。這是什麼?你想單個項目(在這種情況下,當'flag == 1'時你想要什麼?),還是你想要一個列表中的第一個選擇的項目? –

回答

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; 
} 

這也將確保返回一個空列表時,有沒有當前所選項目而不是拋出異常。

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; 
}