2017-06-06 5 views
-1

私は2つの辞書を持っています。 1つはExcelシートの列のリストと定義された列のリストです。私は、定義された列がシートに存在するかどうかを知りたい。存在する場合、選択されたドロップダウンリストで選択されます。C#このコードで、このエラーメッセージが表示されないようにするにはどうすればよいですか?

行内dropdownList.SelectedValue = selectedItem.First()。Key;私は時々errormessageを得るSequenceは要素を含んでいない。私は安全性をコードしていると思った。何を忘れるのですか?

...コマンド...

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でないかどうかをチェックするとき、シーケンスはnullではなく、 'First'を呼び出すとこのエラーが発生します。 このようなものにチェックを変更するのが最善です。 var selectedItem = columnList.Where(cl => cl.Value == defColumnList [index]); if(selectedItem!= null && selectedItem.Any()) dropdownList.SelectedValue = selectedItem.First()。Key; –

答えて

2

このエラーの意味はのSelectedItemは何の要素間を持っていないことですあなたは不可能な最初の要素にアクセスしようとしています。

null可否をチェックする代わりに、コレクション内に要素があるかどうかを確認し、コレクションで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

関連する問題