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)我如何在列表中找到这个对象?

4

3 回答 3

3

如果我正确理解您的问题,您可以使用 LINQ FirstOrDefault

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

if (nextObject != null) 
    nextObject.IsCountedAsAPoint = false;
于 2013-05-02T17:16:53.283 回答
1

如果我理解正确,这可以通过一个简单的 foreach 循环来解决。我不完全理解您对“向上”的强调,因为您并没有真正向上移动列表,而是遍历它。无论如何,以下代码片段会找到第一个 IsCounted 为真的事件并将其更改为假。如果您从给定位置开始,请将 for each 循环更改为 for 循环,并i = currentIndex以退出条件为i < MyList.Count. 保留 break 语句以确保您只修改一个 Incident 对象。

  foreach (prvEmployeeIncident inc in MyList)
  {
       if (inc.IsCountedAsAPoint)
       {
          inc.IsCountedAsAPoint = false;
          break;
       }
  }
于 2013-05-02T17:16:17.000 回答
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;
    }
}

新系列

请确保您不要修改列表本身,因为这会引发异常。

于 2013-05-02T17:34:02.313 回答