이 질문에는 이미 답변이 있습니다.
두 개의 사전이 있습니다. 하나는 Excel 시트의 열 목록과 정의 된 열의 목록입니다. 정의 된 열이 시트에 있는지 알고 싶습니다. 존재하는 경우 선택한 드롭 다운 목록에서 선택됩니다.
행에서dropdownList.SelectedValue = selectedItem.First (). 키;나는 때로 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();
}
이 오류의 의미는 첫 번째 요소에 액세스하려고 시도하는 동안 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 (). Key; - Bad Dub