2013-05-02 3 views
0

"prvEmployeeIncident"유형의 개체 목록을 반복합니다.목록에서 개체를 찾으려면 어떻게합니까?

목적은 다음과 같은 속성이 있습니다

public DateTime DateOfIncident { get; set; } 
public bool IsCountedAsAPoint; 
public decimal OriginalPointValue; 
public bool IsFirstInCollection { get; set; } 
public bool IsLastInCollection { get; set; } 
public int PositionInCollection { get; set; } 
public int DaysUntilNextPoint { get; set; } 
public DateTime DateDroppedBySystem { get; set; } 
public bool IsGoodBehaviorObject { get; set; } 

내 목록은 DateOfIncident 속성에 의해 정렬됩니다. 다음 개체를 찾으려면 위로 IsCounted == true 인 목록을 IsCounted = false로 변경하십시오.

하나의 질문 :

1)이 개체를 목록에서 어떻게 찾을 수 있습니까?

+0

일치하는 다음 항목 일 가능성이 큽니다. – Romoku

답변

1

정확하게 이해하면 간단한 foreach 루프로 해결할 수 있습니다. 나는 당신이 정말로 목록을 올라가지 않을 때 "위로"에 대한 당신의 강조점을 정확하게 이해하지 못합니다. 어쨌든 다음 코드 조각은 IsCounted가 true이고 false로 변경된 첫 번째 Incident을 찾습니다. 주어진 위치에서 시작하는 경우 각 루프를 for 루프로 변경하고 인 종료 조건으로 i = currentIndex에서 시작하십시오. 하나의 Incident 객체 만 수정하려면 break 문을 그대로 두십시오.

foreach (prvEmployeeIncident inc in MyList) 
    { 
     if (inc.IsCountedAsAPoint) 
     { 
      inc.IsCountedAsAPoint = false; 
      break; 
     } 
    } 
3

내가 제대로 질문을 이해한다면, 당신은 LINQ FirstOrDefault을 사용할 수 있습니다 : 당신은 목록을 검색 할 수 List(T).FindIndex을 사용할 수 있습니다

var nextObject = list.FirstOrDefault(x => x.IsCountedAsAPoint); 

if (nextObject != null) 
    nextObject.IsCountedAsAPoint = false; 
+1

몇 초 더 빨라야 beeing을위한 +1 ... – DarkSquirrel42

+0

나는 이미 반복하는 중간에있는 컬렉션에 람다를 사용할 수 있습니까? –

+0

@ user1073912 : 더 나은 성능이 아니기 때문에 그렇게해서는 안되지만 이해를 돕기 위해 코드를 올리시겠습니까? –

0

.

예 :

New collection

public class Foo 
{ 
    public Foo() { } 

    public Foo(int item) 
    { 
     Item = item; 
    } 

    public int Item { get; set; } 
} 

var foos = new List<Foo> 
       { 
        new Foo(1), 
        new Foo(2), 
        new Foo(3), 
        new Foo(4), 
        new Foo(5), 
        new Foo(6) 
       }; 

foreach (var foo in foos) 
{ 
    if(foo.Item == 3) 
    { 
     var startIndex = foos.IndexOf(foo) + 1; 
     var matchedFooIndex = foos.FindIndex(startIndex, f => f.Item % 3 == 0); 
     if(matchedFooIndex >= startIndex) // Make sure we found a match 
      foos[matchedFooIndex].Item = 10; 
    } 
} 
그냥 그 예외가 발생하기 때문에이 목록 자체를 수정하지 않는해야합니다.

관련 문제