2013-05-15 1 views
5
private void AllowOtherSelectors(bool value) 
    { 
     foreach (var c in this.Parent.Controls) 
     { 
      if (c == this) 
       continue; 
      if (!(c is RoundGroupedSelector)) 
       continue; 
      var rgs = c as RoundGroupedSelector; 

      rgs.AllowMultiple = value; 
     } 
    } 

이 코드는 작동하지만 ... LINQ를 사용하면 도움이 될 수 있다고 생각합니다. 이 프로그램은 Atom 프로세서가있는 태블릿에서 사용되므로 최소한의 리소스/사이클을 찾고 있습니다.LINQ를 사용하여 여러 객체에서 동일한 속성을 변경하려면 어떻게해야합니까?

답변

11

글쎄, 난 여전히 foreach 루프를 사용하려고하지만 쿼리 부분에 대한 LINQ를 사용할 수 있습니다

foreach (var c in Parent.Controls 
         .OfType<RoundGroupedSelector>() 
         .Where(x => x != this)) 
{ 
    c.AllowMultiple = value; 
} 
+2

'rgs'는'c '가되어야합니다 –

+1

@RobertSnyder John은 저를 잘못 판단 할 수는 있지만 LINQ는 본질적으로 반복보다 나은 성능을 제공하지 못합니다. 당신이 퍼포먼스가 중요하다고 말한 이후의 일반적인 것. – evanmcdonnal

1

나는 확실히 존의 대답을 갈 것이다, 그러나 다만 "적어도 사이클에 대한 요점을 해결하기 위해 당신은 아마도 조금 더 빨리 이런 그것을 만들 수있다 "사용 :

private void AllowOtherSelectors(bool value) 
{ 
    var saved = this.AllowMultiple; 

    foreach (var c in this.Parent.Controls) 
    { 
     var rgs = c as RoundGroupedSelector; 

     if (rgs != null) 
      rgs.AllowMultiple = value; 
    } 

    this.AllowMultiple = saved; 
} 

내가 루프 전에 this.AllowMultiple의 사본을 만들고 이후에 복원하여 반복 당 if (c == this) 테스트를 피할 수있다. is 중복 사용을 제거했습니다.

컨트롤이 많고 this.AllowMultiple을 지정하는 것이 매우 빠르며 부작용이없는 경우에만 속도가 향상됩니다.

이러한 종류의 미세 최적화는 일반적으로 전혀 무의미하며이라는 점을 강조해야합니다. 이러한 종류의 작업을 수행하면 실제로 더 빠른지 확인해야합니다.

관심있는 게시 목적으로 여기에 게시하고 있습니다. 나는 확실히 당신이 실제로 이것을해야한다고 제안하지는 않습니다! :)

+1

당신은 내 캐릭터의 중요한 결함을 강조합니다. 이 양식은 이러한 RoundGroupedSelectors 중 3 개, 3 개의 단추 및 아마도 2 개의 레이블을 갖습니다. 그래서 당신이 사이클에 관심이 있다고 말한 것은 아마도 나에게 수치스런 일이었습니다. 나는 태블릿 중 하나에 프로그램을 넣었으며 훌륭하게 작동합니다. LINQ는 인식 속도가 느려지지 않습니다. –

+0

하지만 귀하의 게시물은 내 지식을 일깨워주었습니다. 나는 null을 리턴하고 오류를 던지지 않을 것임을 몰랐다. 나는 불법 석방 작전을 얻을 것이라고 생각했다. –

+0

@RobertSnyder 하, 6 개 미만의 컨트롤 ... 예, 존의 코드를 사용하십시오. :) –

관련 문제