我用这个:
var temp = conLines.Select((l, i) => new {l, i}).FirstOrDefault(r => (r.l.IndexOf(item.firstParam) >= 0
&& r.l.IndexOf(item.secondParam) >= 0)
&& (r.l.IndexOf(item.firstParam) < r.l.IndexOf(item.secondParam)
));
但我不想开始&#34; FirstOrDefault&#34;直到我第一次找到conLines的某个子串(一个List)。
示例:
conLines看起来像这样:
NAME:
NOTES:
REVISION HISTORY:
format AT 1024 1 4
1 AC BUS ENUM 0030 04 0 0 1/1 632
NORMAL 04096 1 0,1
2 AC BUS-02 ENUM 00C0 06 0 0 1/1 632
NORMAL 04096 1 0,1
我并不希望它开始寻找&#34; FirstOrDefault&#34;直到紧跟在以下行之后,但重要的是我仍然在整个conLines列表的上下文中跟踪temp.i
format AT 1024 1 4
我想SkipWhile和StartsWith可能有效,但我没有取得任何成功
答案 0 :(得分:1)
SkipWhile
应该有效:
conLines.Select((s, i) => new {s, i})
.SkipWhile(si => si.s != "format AT 1024 1 4")
.Skip(1) // skip to next line
.FirstOrDefault(si => si.s.IndexOf(item.firstParam) >= 0
&& si.s.IndexOf(item.secondParam) >= 0
&& si.s.IndexOf(item.firstParam) < si.s.IndexOf(item.secondParam)
);
请注意,第二个IndexOf
是多余的 - 如果A&gt; = 0且A&lt; B然后B> = 0。
答案 1 :(得分:1)
你的解决方案很接近。只需在.SkipWhile(o => o.l!= "format AT 1024 1 4")
.FirstOrDefault
即可