3

我有一个看起来像这样的通用字符串列表:

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");

我想知道的是是否有任何方法可以选择两个值之间的内容。在这种情况下,我在“1”、“2”和“3”之后。所以换句话说,我想选择最后一个“foo”和“bar”之间的所有内容。或者如果这更容易,也许在“foo”之后选择 N 行。

我最好的猜测是TakeWhile方法,但我需要你的帮助。

4

2 回答 2

2

使用 LINQ获取最后一个通常有点棘手。我只是去LastIndexOf那部分,因为你有一个List,毕竟:

int end = list.LastIndexOf("foo");

list.Skip(end + 1).TakeWhile(x => x != "bar")
于 2012-12-16T02:21:42.773 回答
2

我会使用这样的东西(如果“bar”并不总是出现在“foo”之后):

var start = list.FindLastIndex(i => i == "foo");
var end = list.FindLastIndex(i => i == "bar");

if(start != -1 && end != -1){
    var result = list.Skip(start + 1).Take(end - start - 1);
}

或这个:

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);
}
于 2012-12-16T02:25:40.697 回答