Я хочу сделать это:
string s = "abc";
s[1] = 'x';
и s станет "axc". Однако кажется, что представляют в виде строки [я] только имею метод считывания и не имею никакого метода set. Компилятор дает мне следующую ошибку:
"Свойство или индексатор 'string.this [интервал]' не могут быть присвоены - это только для чтения"
Я предполагаю, что мог сделать цикл и изменить символ, который я хочу. но я просто задавался вопросом, существует ли простой способ сделать это? И почему нет метода set для строки [я]?
Заранее спасибо.
Строки неизменяемы, поэтому вам нужно создать массив char[]
, изменить его, а затем снова превратить в строку:
string s = "foo";
char[] arr = s.ToCharArray();
arr[1] = 'x';
s = new string(arr);
Строки неизменяемы, поэтому нет сеттера, однако вы можете использовать построитель строк:
StringBuilder s = new StringBuilder("abc");
s[1] = 'x';
(Ваш пример немного неправильный: s[2] = 'x' должен изменить его на "abx".)
Нет, вы не можете, так как строки неизменяемы, вы должны создать новую строку:
Вы должны использовать метод, который возвращает новую строку с желаемой модификацией.
Надеюсь, это поможет!
Почему бы не сделать это, если вы используете какой-нибудь Linq
private string ConvertStr(string inStr , int inIndex , char inChar)
{
char[] tmp = inStr.ToCharArray();
tmp.SetValue(inChar , inIndex);
return new string(tmp);
}
Это должно позволить вам заменить любой символ, который вы хотите, на любой символ, который вы хотите.
Помните, что в управляемом и безопасном .Net строки неизменяемы, поэтому даже если бы вы могли сделать вышеописанное, вы бы на самом деле создали новую копию строки с заменой.
Если вы заменяете только один символ, то лучше всего использовать простой цикл.
Однако, если вы собираетесь сделать несколько замен, подумайте об использовании StringBuilder
:
string s = "abc";
var stringBuilder = new StringBuilder(s);
stringBuilder[1] = 'x';
s = stringBuilder.ToString();
да в c# строка не может быть изменена.
но мы можем попробовать это
string s = "abc";
s = s.Replace('b', 'x');
Console.WriteLine(s);
ответом будет "axc". так как это заменит старую строку на новую.
Что насчет этого?
string originalString = "abc";
var index = 1;
char charToReplace = 'x';
var newString = string.Format("{0}{1}{2}", originalString.Substring(0, index), charToReplace, originalString.Substring(index + 1));
Я не думаю, что вы можете сделать это в C#, так как строка не может быть изменена (только уничтожена и создана заново). Посмотрите на класс StringBuilder.