2012-07-23 3 views
1

예를 들어 설명해 드리겠습니다. 말하기 :컬렉션에서 Linq를 얻는 방법?

  1. 일부 정규식 그룹의 이름을 열거하는 CheckedListBox 컨트롤입니다.
  2. 사용자가 입력 텍스트를 인쇄 할 수있는 TextBox 컨트롤
  3. 입력 텍스트가 정규식과 일치하고 CheckedListBox의 값을 사용자에게 표시하면 프로그램 확인을 수행하는 Button입니다.

버튼 클릭 이벤트 처리기는 다음과 같이 살펴 보자 : 그래서

Regex r = new Regex(@"^(?<Num5>\d{1,5})\:(?<SomeText>.{1,})$"); 
Match m = r.Match(textBox1.Text); 
if (m.Success) 
{ 
    MessageBox.Show(
     string.Concat(
      checkedListBox1.CheckedItems 
          .OfType<string>() 
          .Where(s => m.Groups[s].Success) 
          .SelectMany(s => string.Format("{0}: {1}\n", 
                  s, 
                  m.Groups[s].Value)))); 
} 
else 
    MessageBox.Show("Input text didn't match"); 

을 명시 적으로 사용하지 않고 CheckedItemCollection (유사한 인터페이스의리스트를 구현)과 유사한 컬렉션에서 LINQ 기능을 얻을 수있는 기회가있다 OfType 또는 Cast 메소드 중 무엇입니까?

추신 :이 .. 그것에 대해 너무 중요하지 마십시오, 단지 예, 그래서

답변

2

아니, CheckedItemCollection는 제네릭이 아닌이며, 컴파일러는 당신이 다루고있는 어떤 물체 모르겠다 . 사용

.OfType<type>() 

이 최선입니다.

2

번호 LINQ는 일반 IEnumerable<T>에서만 작동하지만 Cast() 및 은 IEnumerable입니다.

관련 문제