2017-06-06 35 views
-1

我有兩本詞典。一個帶有Excel工作表中列的列表和已定義列的列表。我想知道表單中是否存在已定義的列。如果他們存在,那麼他們將在選定的下拉列表中進行選擇。C#如何防止在此代碼中發生此錯誤消息:序列不包含任何元素?

在行dropdownList.SelectedValue = selectedItem.First()。Key;我有時會得到一個errormessage序列不包含任何元素。我認爲我編碼安全。我忘了什麼?

...命令

SetDataSource(import.ColumnList, import.DefColumnList, ddlSomeColumn, SomeEnum.Zipcode); 

...然後調用方法...

private void SetDataSource(Dictionary<int, string> columnList, Dictionary<int, string> defColumnList, DropDownList dropdownList, SomeEnum item) 
    { 
     int index = (int)item; 
     dropdownList.BeginUpdate(); 
     dropdownList.ValueMember = "Key"; 
     dropdownList.DisplayMember = "Value"; 
     dropdownList.DataSource = columnList; 
     if (defColumnList.ContainsKey(index) && defColumnList[index].Length > 0) 
     { 
      var selectedItem = columnList.Where(cl => cl.Value == defColumnList[index]); 
      if (selectedItem != null) 
       dropdownList.SelectedValue = selectedItem.First().Key; 
     } 
     dropdownList.EndUpdate(); 
    } 
+3

selectedItem.First()將在selectedItem爲空時發出該錯誤。 – Mixxiphoid

+3

當columnList.Where(cl => cl.Value == defColumnList [index])產生一個空序列,然後調用First()時,就會發生這種情況。 – spender

+0

'SelectedItem'將產生一系列項目。當你檢查它是否爲null時,序列isnt null並調用'First'將導致這個錯誤。 它最好把你的支票改成這樣的東西 var selectedItem = columnList.Where(cl => cl.Value == defColumnList [index]); if(selectedItem!= null && selectedItem.Any()) dropdownList.SelectedValue = selectedItem.First()。Key; –

回答

2

此錯誤的含義是,則selectedItem是具有同時沒有元件你正試圖訪問不可能的第一個元素。

取代檢查可空性,您應該檢查集合中是否有任何元素,然後應該在集合上執行First方法。

var selectedItem = columnList.Where(cl => cl.Value == defColumnList[index]); 
if (selectedItem.Any()) 
    dropdownList.SelectedValue = selectedItem.First().Key; 
1

.Where()運算符返回枚舉,而不是單個元素。所以,你的selectedeItem!= null條件總是返回true。將您的代碼更改爲:

private void SetDataSource(Dictionary<int, string> columnList, Dictionary<int, string> defColumnList, DropDownList dropdownList, SomeEnum item) 
    { 
     int index = (int)item; 
     dropdownList.BeginUpdate(); 
     dropdownList.ValueMember = "Key"; 
     dropdownList.DisplayMember = "Value"; 
     dropdownList.DataSource = columnList; 
     if (defColumnList.ContainsKey(index) && defColumnList[index].Length > 0) 
     { 
      var selectedItem = columnList.FirstOrDefault(cl => cl.Value == defColumnList[index]); 
      if (selectedItem != null) 
       dropdownList.SelectedValue = selectedItem.Key; 
     } 
     dropdownList.EndUpdate(); 
    } 
+1

這段代碼也總是將'selectedItem!= null'評估爲'true'。 – Enigmativity

+0

如果selectedItem!= null,我們將選擇它。對我來說似乎是對的。 –

+0

@DavidB - 此代碼更改OP正在查找的語義。這是不正確的。 – Enigmativity

相關問題