C# Lambda“;在“之间选择”;
我有一个通用字符串列表,如下所示:C# Lambda“;在“之间选择”;,c#,asp.net,C#,Asp.net,我有一个通用字符串列表,如下所示: List<string> list = new List<string>(); list.Add("foo"); list.Add("1"); list.Add("2"); list.Add("bar"); list.Add("foo"); list.Add("1"); list.Add("2"); list.Add("3"); list.Add("bar"); List List=新列表(); 列表。添加(“foo”); 列表。添
List<string> list = new List<string>();
list.Add("foo");
list.Add("1");
list.Add("2");
list.Add("bar");
list.Add("foo");
list.Add("1");
list.Add("2");
list.Add("3");
list.Add("bar");
List List=新列表();
列表。添加(“foo”);
列表。添加(“1”);
列表。添加(“2”);
列表。添加(“酒吧”);
列表。添加(“foo”);
列表。添加(“1”);
列表。添加(“2”);
列表。添加(“3”);
列表。添加(“酒吧”);
我想知道的是,是否有任何方法可以选择两个值之间的值。在本例中,我在“1”、“2”和“3”之后。换句话说,我想选择最后一个“foo”和“bar”之间的所有内容。或者如果更容易的话,在“foo”之后选择N行
我最好的猜测是使用TakeWhile
方法,但我需要您的帮助。对于LINQ来说,使用最后一种方法通常有点棘手。对于这一部分,我会选择LastIndexOf
,因为您有一个列表,毕竟:
int end = list.LastIndexOf("foo");
list.Skip(end + 1).TakeWhile(x => x != "bar")
我会用这样的词(如果在“foo”之后不总是出现“bar”):
或者这个:
var start = list.FindLastIndex(i => i == "foo");
var end = list.FindLastIndex(i => i == "bar");
if(start != -1 && end != -1){
var result = list.GetRange(start + 1, end - start - 1);
}
谢谢,这里有没有办法使用“StartsWith”方法?所以我得到了所有以“foo”开头的行?@Johan:你应该使用FindLastIndex
而不是LastIndexOf
,正如Eugene的回答所示:int end=list.FindLastIndex(x=>x.StartsWith(“foo”)代码>
var start = list.FindLastIndex(i => i == "foo");
var end = list.FindLastIndex(i => i == "bar");
if(start != -1 && end != -1){
var result = list.GetRange(start + 1, end - start - 1);
}