Вопрос по string, .net, c# – Почему .NET создает новые подстроки вместо того, чтобы указывать на существующие строки?

7

Из краткого обзора с помощью Reflector, это выглядит какString.Substring() выделяет память для каждой подстроки. Я прав, что это так? Я думал, что в этом не будет необходимости, поскольку строки являются неизменяемыми.

Моей основной целью было создатьIEnumerable<string> Split(this String, Char) метод расширения, который не выделяет дополнительную память.

Error: User Rate Limit Exceeded Felipe Fujiy Pessoto
Error: User Rate Limit Exceeded Domenic

Ваш Ответ

5   ответов
22

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

public struct SubString {

   private string _str;
   private int _offset, _len;

   public SubString(string str, int offset, int len) {
      _str = str;
      _offset = offset;
      _len = len;
   }

   public int Length { get { return _len; } }

   public char this[int index] {
      get {
         if (index < 0 || index > len) throw new IndexOutOfRangeException();
         return _str[_offset + index];
      }
   }

   public void WriteToStringBuilder(StringBuilder s) {
      s.Write(_str, _offset, _len);
   }

   public override string ToString() {
      return _str.Substring(_offset, _len);
   }

}

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Error: User Rate Limit Exceeded

String s1 = "Hello", s2 = ", ", s3 = "World!";
String res = s1 + s2 + s3;

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
2

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

0

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Of course, nothing prevents the .NET BCL team to change this behavior in future versions of .NET. It wouldn't have any impact on existing code.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededbecauseError: User Rate Limit ExceededcouldError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы