-1

두 개의 사전이 있습니다. 하나는 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.First()selectedItem이 비어 있으면 오류가 발생합니다. - Mixxiphoid
  • 이것은columnList.Where(cl => cl.Value == defColumnList[index])호출 한 빈 시퀀스를 생성합니다.First()에. - spender
  • SelectedItem아이템의 스퀘어가 생길 것입니다. null이 아닌 시퀀스가 null이 아니고 호출 중인지 확인하기 위해 검사 할 때First이 오류가 발생합니다. 체크를 다음과 같이 변경하는 것이 가장 좋습니다 var selectedItem = columnList.Where (cl = > cl.Value == defColumnList [index]); if (selectedItem! = null & selectedItem.Any ()) dropdownList.SelectedValue = selectedItem.First (). Key; - Bad Dub
  • First ()가 비어 있으면 오류가 발생합니다. 하지만 난 이런 식으로 찾고 있었다 : if (selectedItem.Any ()). 그리고 그것은 작동합니다 ... - user1531040
  • 나는 지금 이해한다 : 나의 질문의 제목은 틀렸다. 나는 이것을 바꿨다. - user1531040

2 답변


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


  • 이 코드는 항상 평가할 것입니다.selectedItem != null같이true. - Enigmativity
  • selectedItem! = null 인 경우 선택합니다. 나에게 맞는 것 같다. - Amy B
  • @DavidB -이 코드는 OP가 찾고있는 의미를 변경합니다. 잘못된 것입니다. - Enigmativity
  • @Enigmativity no, OP는 Where가 null 인 결과를 테스트합니다. 항상 false입니다. 그것은 OP의 실수이므로 변경해야합니다. - Amy B
  • @DavidB - 네,하지만 기본값은KeyValuePair<int, string>결코 아니다.null.KeyValuePair<int, string>가치 유형입니다. - Enigmativity

연결된 질문


최근 질문