Применяется ли неизменный принцип при манипулировании символом в строке? - PullRequest
0 голосов
/ 07 июля 2010

Если я манипулирую определенным символом строки вне строки, будет ли она по-прежнему рассматриваться CLR как внутренне манипулирование строкой, приводящее к временному созданию строки?

Например:

string myString = "String";
myString[0] = 's';

Как насчет создания массива символов [], эквивалентного редактируемой строке, выполнения всех манипуляций с позициями и преобразования ее обратно в строку.

Поможет ли это обрезать временные строки, по крайней мере, до двух реальных манипуляций с строками?

Ответы [ 3 ]

4 голосов
/ 07 июля 2010

Этот код не компилируется:

ошибка CS0200: Свойство или индексатор 'string.this [int]' нельзя назначить - оно доступно только для чтения

Это потому, что строки являются неизменяемыми, как вы сказали.

Для изменения строки вам нужно использовать класс StringBuilder (изменяемая строка для всех намерений и целей), который имеет чтение-записьthis[int] свойство.

StringBuilder builder = new StringBuilder("Sample");
builder[0] = 's'; //produces "sample"
2 голосов
/ 07 июля 2010

Вероятно, стоит упомянуть, что, хотя при нормальном использовании строки считаются неизменяемыми, на самом деле их можно изменять. Если вы сконфигурируете проект VS для «разрешения небезопасного кода», вы можете использовать небезопасный код для изменения строки:

internal class Program
{
    private static void Main()
    {
        const string SomeString = "hello";

        Console.WriteLine("Original string:'{0}'.", SomeString);

        unsafe
        {
            fixed (char* charArray = SomeString)
            {
                byte* buffer = (byte*)(charArray);

                buffer[0] = 66;
                buffer[2] = 76;
                buffer[4] = 73;
                buffer[6] = 78;
                buffer[8] = 71;
            }
        }

        Console.WriteLine("Mutated string:'{0}'.", SomeString);
    }
}

Это можно считать довольно злым, но у него есть свои применения, например .NET Регулярные выражения в байтах вместо символов .

1 голос
/ 07 июля 2010

Строки неизменны.Вы не можете изменить отдельные символы.Оператор индексатора для строк доступен только для чтения, поэтому вы получите сообщение об ошибке, если попытаетесь назначить, используя индекс стиля массива для строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...