Нулевой оператор объединения (??)
Лично я не вижу никаких минусов в использовании этого оператора. Рассмотрим следующие три примера кода, от «простых» до «сложных» новых операторов.
Без магии:
bool isNameSet = false;
string name;
if ( isNameSet )
{
Console.WriteLine( name );
}
else
{
Console.WriteLine( "No name set." );
}
Тернарный оператор:
bool isNameSet = false;
string name;
Console.WriteLine( isNameSet ? name : "No name set." );
Нулевое слияние:
string name = null;
Console.WriteLine( name ?? "No name set." );
Причина, по которой эти операторы были изобретены, заключается в том, что они представляют собой очень распространенные операции программирования . Нежелание их использовать, потому что вы к ним не привыкли, просто упрямство . Языки развиваются, функции развиваются, учитесь ими пользоваться!
ключевое слово var
У меня несколько иное мнение о ключевом слове var. Тип переменной часто дает дополнительную информацию о вашем коде. Я считаю, что сокрытие типа с помощью ключевого слова var иногда делает код менее читабельным. Вы меньше знаете, чего ожидать, не используя автоматическое завершение или наводя курсор на идентификаторы, чтобы увидеть, что они на самом деле. На мой взгляд, это приводит к коду, который медленнее для чтения / записи.
Я использую ключевое слово, когда обнаруживаю, что тип не дает много дополнительной информации.
- Главным образом в циклах foreach , которые я узнал от Resharper, как это там. Большую часть времени вы знаете, какой тип коллекции вы просматриваете, поэтому вы знаете, что ожидаете элементы из этой коллекции.
- Linq запросы . Результатом запросов linq часто являются очень сложные универсальные типы. Отображение этого типа приносит больше вреда, чем пользы.
- Длинные имена, которые просто инициализируются их конструктором. Вы уже можете сказать, что это за тип, посмотрев на конструктор.
В качестве примера для последнего утверждения:
ThisIsSomeSpecializedTypeRightHere duplication =
new ThisIsSomeSpecializedTypeRightHere();
var justAsReadable =
new ThisIsSomeSpecializedTypeRightHere(); // Less duplication.
// But I still prefer the following ...
int number = 9;
SomeCreatedType foo = Factory.CreateSomeType();
??
оператор null coalesce после его объяснения, он не должен быть допущен к рабочему коду.