C#中一般的foreach都是从集合中自动循环读入一个元素进行操作,但是我现在想从左到右读入一个字符串,如果碰到'['号便进入另一个操作并使foreach的“指针”++往前移,知道碰到']'号就如下面代码描述foreach (char ch in this._input.ToCharArray())   
        {   
             switch (ch)   
                {   
                    case '+':   
                    case '-':   
                        /////do someting
                        break;   
                    case '[': 
                          do{
                            ///使ch往前移动
                           }while(ch!=']');         //////////////////.......
                   }
           }  应该怎么做??我是C#新手,恳求答案!

解决方案 »

  1.   

    bool bStart=false;
    foreach (char ch in this._input.ToCharArray())   
            {   
                if(bStart && ch!=']')
                 {
                 switch (ch)   
                    {   
                        case '+':   
                        case '-':                          
                            /////do someting
                            break;   
                        case '[': 
                              bStart=true;
                              break;
                        case ']':
                              bStart=false;
                              break;         //////////////////.......
                       }                  }       
               }
      

  2.   

    该for~~foreach是用GetEnumarator做的
    方法就叫MoveNext, 
      

  3.   

    for (int i = 0; i < _input.Length; i++)   
    {
      char ch = _input[i];
      switch (ch)   
      {   
        case '+':   
        case '-':   
          ///// do someting
          break;   
        case '[':
          while (i < _input.Length && _input[i] != ']') i++; 
          break;
        ////////////////// .......
      }
    }
      

  4.   

    最初就设计错误, 你的要求 使ch往前移动也错了, CH靠什么功能向前移动, 没有任何的方法.
    修改设计 for (int i = 0l i < _input.ToCharArray().legnth;  i++)
    或者是
     IEnumerator t = ._input.ToCharArray().GetEnumerator();
               while (t.MoveNext())
               {
                   char ch = (char)t.Current;
                   switch (ch)
                   {
                       case '+':
                       case '-':
                           break;
                       case '[':
                           do
                           {
                               if (t.MoveNext())
                               {
                                   ch = (char)t.Current;
                               }
                               else
                               {
                                   break;
                               }                       } while (ch != ']');
                           break;
                   }
      

  5.   

    这个要隆重推荐老赵的2篇文章:趣味编程:从字符串中提取信息(参考答案 - 上)
    http://www.cnblogs.com/JeffreyZhao/archive/2009/10/21/code-for-fun-tokenizer-answer-1.html趣味编程:从字符串中提取信息(参考答案 - 下)
    http://www.cnblogs.com/JeffreyZhao/archive/2009/10/22/code-for-fun-tokenizer-answer-2-fsharp.html
      

  6.   

    for (int i = 0; i < _input.Length; i++)   
    {
      char ch = _input[i];
      switch (ch)   
      {   
        case '+':   
        case '-':   
          ///// do someting
          break;   
        case '[':
          while (i < _input.Length && _input[i] != ']') i++; 
          break;
        ////////////////// .......
      }
    }