我正在迭代“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 :(得分:3)
如果我正确理解您的问题,您可以使用LINQ FirstOrDefault
:
var nextObject = list.FirstOrDefault(x => x.IsCountedAsAPoint);
if (nextObject != null)
nextObject.IsCountedAsAPoint = false;
答案 1 :(得分:1)
如果我理解正确,这可以通过一个简单的foreach循环来解决。我并不完全理解你对“向上”的强调,因为你没有真正提出一个列表,你会遍历它。无论如何,以下代码片段找到IsCounted为true的第一个Incident,并将其更改为false。如果您从给定位置开始,请将每个循环更改为for循环,并从i = currentIndex
开始,退出条件为i < MyList.Count
。保留break语句以确保只修改一个Incident对象。
foreach (prvEmployeeIncident inc in MyList)
{
if (inc.IsCountedAsAPoint)
{
inc.IsCountedAsAPoint = false;
break;
}
}
答案 2 :(得分: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;
}
}
请确保您不会修改列表本身,因为这会引发异常。