Все три в основном одинаковы.
Помните, что строки неизменны. Каждый раз, когда вы вызываете метод для строки, он выделяет новый строковый объект, поэтому при вызове Remove()
создается новый объект, который затем используется для вызова Replace()
.
1 & 2 в основном идентичны. № 3 немного отличается, потому что вы используете 3 отдельные переменные, поэтому вы держитесь за ссылки на эти строки, чтобы их можно было использовать позже. Сборщик мусора должен знать, что делать со всеми тремя примерами, и обрабатывать их примерно одинаково, независимо от того, храните ли вы промежуточные строки как переменные или нет.
Я бы использовал # 2, просто потому, что он содержит меньше строк кода и не жертвует удобочитаемостью, но все еще довольно короток.