IT Share you

ListBox.items를 일반 목록으로 변환하는 가장 간결한 방법

shareyou 2020. 12. 10. 21:27
반응형

ListBox.items를 일반 목록으로 변환하는 가장 간결한 방법


C #을 사용하고 .NET Framework 3.5를 대상으로합니다. 나는 코드의 작은 간결하고 효율적인 조각 A의 모든 항목을 복사 할 찾고 있어요 목록 상자 A를 List<String>(일반 목록 ).

현재 아래 코드와 비슷한 것이 있습니다.

        List<String> myOtherList =  new List<String>();
        // Populate our colCriteria with the selected columns.

        foreach (String strCol in lbMyListBox.Items)
        {
            myOtherList.Add(strCol);
        }

물론 작동하지만 일부 새로운 언어 기능을 사용하여 더 나은 방법이 있어야한다는 느낌을받을 수 있습니다. List.ConvertAll 메서드 와 같은 것을 생각하고 있었지만 이것은 ListBox.ObjectCollection 컬렉션이 아닌 일반 목록에만 적용됩니다 .


약간의 LINQ가해야합니다.

 var myOtherList = lbMyListBox.Items.Cast<String>().ToList();

물론 캐스트의 Type 매개 변수를 Items 속성에 저장 한 유형으로 수정할 수 있습니다.


다음이 수행합니다 (Linq 사용).

List<string> list = lbMyListBox.Items.OfType<string>().ToList();

OfType의 호출은 문자열이 사용되는 목록 상자의 항목에서 해당 항목 만 보장합니다.

Cast를 사용 하면 항목이 문자열이 아닌 경우 예외가 발생합니다.


이건 어때:

List<string> myOtherList = (from l in lbMyListBox.Items.Cast<ListItem>() select l.Value).ToList();

는 어때:

myOtherList.AddRange(lbMyListBox.Items);

의견과 DavidGouge의 답변을 기반으로 편집하십시오.

myOtherList.AddRange(lbMyListBox.Items.Select(item => ((ListItem)item).Value));

더 이상 필요하지 않습니다. Listbox에서 모든 값의 목록을 얻습니다.

private static List<string> GetAllElements(ListBox chkList)
        {
            return chkList.Items.Cast<ListItem>().Select(x => x.Value).ToList<string>();
        }

참고 URL : https://stackoverflow.com/questions/1565504/most-succinct-way-to-convert-listbox-items-to-a-generic-list

반응형