Эквиваленты ли следующие операторы?

430
21 февраля 2017, 15:58

Допустим у меня есть инициализированная строка string s. Являются ли следующие операторы эквивалентными в плане поведения? Генерируется ли разный IL мне не важно.

// 1
s = s + "";
// 2
s = s ?? "";
// 3
s = $"{s}";

Если в каких-либо случаях есть отличия, то, пожалуйста, укажите их.

Answer 1

Да, все три выражения дают один и тот же результат при одинаковых параметрах.

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

Answer 2

Являются ли следующие операторы эквивалентными в плане поведения?

Это как спрашивать: Являются ли следующие действия одинаковыми:

4+2+2

4*2

6+2

Нет. Действия разные. Хотя результат одинаковый.

Так что: Нет. Операторы разные и действия разные соответственно. Конкретно в даном случае РЕЗУЛЬТАТЫ будут эквивалентны. Результаты. Но не операторы. :)

Поведение, собственно тоже будет немного отличатся. Вполне возможно что некоторые из этих вариантов будет немного быстрее (хотя они все быстрые). Но существенной разницы ты вряд ли получишь, даже, на детализированных тестах.

READ ALSO
Создание домена приложения и подгрузка dll

Создание домена приложения и подгрузка dll

При создании домена приложения и подгрузке dll возникает исключение FileNotFoundExcption с текстом Не удалось загрузить файл или сборку "MyLibrary, Version=10

332
Как обратиться к ячейкам элемента Grid и их содержимому

Как обратиться к ячейкам элемента Grid и их содержимому

Имею сетку, построенную с помощью Grid 10*10В ячейках этой сетки лежат элементы Button, созданные и помещенные туда динамически

597
Использование FluentValidation в патерне “Repository”?

Использование FluentValidation в патерне “Repository”?

Как использовать FluentValidation в патерне репозиторий, когда необходимо проверить уникальность, например, логина (проверяется в БД)?

352