この質問にはすでに答えがあります。
私は二つの辞書を持っています。 Excelシートからの列のリストと定義された列のリストを持つもの。定義された列がシートに存在するかどうか知りたいのですが。存在する場合は、選択されたドロップダウンリストで選択されます。
行にdropdownList.SelectedValue = selectedItem.First()。キー;エラーメッセージシーケンスに要素が含まれていないことがあります。安全性をコード化したと思いました。私は何を忘れますか?
... コマンド ...
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();
}
このエラーの意味は、最初の要素にアクセスしようとしているときにselectedItemに要素がないということです。これは不可能です。
NULL可能性をチェックする代わりに、コレクション内に何らかの要素があるかどうかをチェックしてから実行するFirst
コレクションのメソッド
var selectedItem = columnList.Where(cl => cl.Value == defColumnList[index]);
if (selectedItem.Any())
dropdownList.SelectedValue = selectedItem.First().Key;
.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();
}
selectedItem != null
としてtrue
。 - EnigmativityKeyValuePair<int, string>
決してないnull
。KeyValuePair<int, string>
値型です。 - Enigmativity
selectedItem.First()
selectedItemが空のときにエラーが発生します。 - MixxiphoidcolumnList.Where(cl => cl.Value == defColumnList[index])
空のシーケンスを生成し、それを次に呼び出すFirst()
に。 - spenderSelectedItem
アイテムの列を生成しようとしています。それがnullでないかどうかを確認するとき、シーケンスはnullではなく呼び出しFirst
このエラーが発生します。あなたのチェックをこのようなものに変更するのが最善ですvar selectedItem = columnList.Where(cl => cl.Value == defColumnList [index]); if(selectedItem!= null& selectedItem.Any())dropdownList.SelectedValue = selectedItem.First()。 - Bad Dub