C# 字符串管理数组

C# 字符串管理数组,c#,arrays,string,linq,asp.net-core,C#,Arrays,String,Linq,Asp.net Core,我有一个字符串数组,我想在这个数组的间隔内获取所有字符串,直到字符串不包含任何内容 比如: string [] arrayReading = { "e","x","a","takefromhere", "keeptaking","keeptaking","dont'ttakefromhere","m","p","l","e" }; 我试过: List<string> result = null; for (int i = 0; i <

我有一个字符串数组,我想在这个数组的间隔内获取所有字符串,直到字符串不包含任何内容

比如:

string [] arrayReading = {
  "e","x","a","takefromhere",
  "keeptaking","keeptaking","dont'ttakefromhere","m","p","l","e"
};
我试过:

        List<string> result = null;

        for (int i = 0; i < arrayReading.Length; i++)
        {
            if (arrayReading[i].Contains("takefromhere"))
            {
                result.Add(arrayReading[i]);

                if (!arrayReading[i + 1].Contains("dont'ttakefromhere"))
                {
                    result.Add(arrayReading[i + 1]);

                    if (!arrayReading[i + 2].Contains("dont'ttakefromhere"))
                    {
                        rescription.Add(arrayReading[i + 1]);
                    }
                }
            }
        }
列表结果=null;
for(int i=0;i
似乎可以工作,但它不是我想要的真正动态的,因为可能我需要在“takefromhere”和“don'ttakefromhere”之间取20个值。

当查询时,您可以尝试Linq:

结果:

takefromhere; keeptaking; keeptaking

所以你总是有一个开始值,对吧,那么结束值呢,总是有还是没有?如果没有结束值,只需将它们全部取下,或者在它们之间取下,对吗?
List result=arrayReading.SkipWhile(item=>item!=startItem).TakeWhile(item=>item!=stopItem).ToList()
您将有
{“takefromhere”,“keeptaking”,“keeptaking”}
LINQ的
SkipWhile
TakeWhile
允许您几乎逐字翻译您的规范。非常感谢,我不知道这个属性SkipWhile/TakeWhile@RobNone他们不是财产。。。此外,这个答案可以解决OP在上面代码中的错误,这样用户就可以理解错误所在以及可能遇到相同问题的任何其他人,但通过提供不同的解决方案,这与此不同。@đěxě341;或者我们可以有一个解决OP错误所在的新答案,你甚至可能是写这个的人。:-)
 List<string> result = new List<string>(); 

 bool taking = false;

 foreach (string item in arrayReading) {
   if (!taking) 
     taking = item == "takefromhere";

   if (taking) {
     if (item == "dont'ttakefromhere")
       break;

     result.Add(item);
   } 
}
Console.Write(string.Join("; ", result));
takefromhere; keeptaking; keeptaking