Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从StringBuilder的开头提取数据_C#_Stringbuilder - Fatal编程技术网

C#从StringBuilder的开头提取数据

C#从StringBuilder的开头提取数据,c#,stringbuilder,C#,Stringbuilder,我想从StringBuilder变量的开头提取一些字符。 我写了下面的代码: private string getPart(StringBuilder data, int len) { string s = data.ToString(0, len); data.Remove(0, len); return s; } 关于更好的编码有什么建议吗?您可以使用CopyTo方法: private string getPart(StringBuilder data, int l

我想从StringBuilder变量的开头提取一些字符。
我写了下面的代码:

private string getPart(StringBuilder data, int len)
{
    string s = data.ToString(0, len);
    data.Remove(0, len);
    return s;
}

关于更好的编码有什么建议吗?

您可以使用
CopyTo
方法:

private string getPart(StringBuilder data, int len)
{
    var output = new char[len];
    data.CopyTo(0, output, 0, len);
    data.Remove(0, len);
    return new string(output);
}

如果要在代码的许多部分提取字符, 您可以尝试将该算法实现为扩展方法:

公共静态类StringBuilderExtensions{
公共静态字符串提取(此StringBuilder源代码,整数长度){
if(Object.ReferenceEquals(null,source))
抛出新的ArgumentNullException(“源”);
else if((长度<0)| |(长度>source.length))
抛出新ArgumentOutOfRangeException(“长度”);
//你的实际算法
字符串结果=source.ToString(0,长度);
源。删除(0,长度);
返回结果;
}
}
...
StringBuilder数据=。。。

字符串s=数据。提取(len);//这似乎是合理的。但是,它正在修改字符串生成器,这似乎很奇怪。您是只想获取第一个x字符,还是想从字符串中删除这些字符?是的,我想从一开始就增量提取和处理数据,所以我应该删除提取的数据。这可能是关于为什么不使用
System.Collections.Generics.Queue
?非常适合实现方法(教育),谢谢Dmitry
  public static class StringBuilderExtensions {
    public static String Extract(this StringBuilder source, int length) {
      if (Object.ReferenceEquals(null, source))
        throw new ArgumentNullException("source");
      else if ((length < 0) || (length > source.Length))
        throw new ArgumentOutOfRangeException("length");

      // Your actual algorithm
      String result = source.ToString(0, length);

      source.Remove(0, length);

      return result;
    }
  }

  ...

  StringBuilder data = ...
  String s = data.Extract(len); // <- Just extract