2013-05-02 74 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屬性排序。我想找到下一個對象up列表IsCounted == true並將其更改爲IsCounted = false。

一個問題:

1)如何在列表中找到該對象?

+0

可能是下一個匹配的項目。 – Romoku 2013-05-02 17:16:00

回答

1

如果我理解正確,這可以通過一個簡單的foreach循環來解決。我不完全理解你對「向上」的強調,因爲你並沒有真的提出一個列表,而是遍歷它。無論如何,下面的代碼片段找到了IsCounted爲true的第一個事件並將其更改爲false。如果您從給定位置開始,請將每個循環更改爲for循環,並從i = currentIndex開始,退出條件爲i < MyList.Count。保留break語句以確保您只修改一個事件對象。

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

如果我正確理解你的問題,你可以使用LINQ FirstOrDefault

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

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

加速+1幾秒... – DarkSquirrel42 2013-05-02 17:20:01

+0

我可以在集合中使用lambda,我已經在迭代中間了嗎? – 2013-05-02 17:22:42

+0

@ user1073912:它不應該是因爲它不是更好的性能,但請你能發佈你的代碼以獲得更多的理解嗎? – 2013-05-02 17:24:38

0

您可以使用List(T).FindIndex搜索該名單。

例子:

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

New collection

只要確保你不要修改列表本身,因爲這會拋出異常。