c # Заменить строку в свойстве класса с помощью linq не работает - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь найти конкретную строку в свойстве класса и заменить ее другой строкой, если она найдена. Я пробовал разные способы, используя Linq, но я не могу его заменить. В режиме отладки, когда я снова наблюдаю за объектом, команда замены не работает. Пожалуйста помоги. Включая пример, приведенный ниже.

class Tryreplace
{
    public string ClubName { get; set; }
}

List<Tryreplace> tryreplaces = new List<Tryreplace>();

Tryreplace tryreplace = new Tryreplace { ClubName = "Manchester United FC" };

Tryreplace tryreplace2 = new Tryreplace { ClubName = "Arsenal FC" };

tryreplaces.Add(tryreplace);

tryreplaces.Add(tryreplace2);

Пробовал 2 способами ниже, оба не работали ...

tryreplaces.ForEach(x => x.ClubName.Replace("Manchester", "Newcastle"));



List<Tryreplace> tryreplaces2 = tryreplaces.Select(x => { x.ClubName.Replace("Manchester", "Newcastle"); return x; }).ToList();

После обоих я вижу только Манчестер, а не Ньюкасл.

Я бы хотел видеть замененную строку Newcastle в объектах, а не в Манчестере. Пожалуйста, помогите!

Ответы [ 2 ]

8 голосов
/ 19 июня 2019

Посмотрите официальную документацию от String.Replace() Метод:

Возвращает новую строку, в которой все вхождения указанной строки в текущий экземпляр заменяется другой указанной строкой.

Таким образом, вам нужно установить свойство, как показано в примере:

tryreplaces.ForEach(x => x.ClubName = x.ClubName.Replace("Manchester", "Newcastle"))

String.Replace () Документы от Microsoft

3 голосов
/ 19 июня 2019

в C # (или в большинстве языков) string являются неизменяемыми. Это означает, что всякий раз, когда вы вносите в него изменения, он создает другой экземпляр строки, но не меняет саму переменную.

Или просто, если вы хотите заменить часть строки, вам нужно присвоить make исходной переменной.

string name = "Amyn";
name.Replace("A", "@");
Console.WriteLine(name);       // it will be still Amyn
name = name.Replace("A", "@");  // its right way 
Console.WriteLine(name);       // it will display "@myn"

поэтому в вашем коде вам также необходимо присвоить переменную обратно.

tryreplaces.ForEach(x => x.ClubName = x.ClubName.Replace("Manchester", "Newcastle"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...