Я не считаю это хорошая практика.
Во-первых, сам метод расширения вводит метод для чего-то, к которому у нас уже есть ключевое слово: throw. Это может показаться странным. Он объявляет тип возврата, хотя он никогда не вернет значение, просто чтобы угодить компилятору в том контексте, где вы хотите его использовать. Ссылаясь на то, что уже указывали другие, это скорее «принцип наибольшего удивления».
Затем, глядя на то, как вы использовали этот метод, полученный код кажется не очень понятным для чтения. Еще хуже: вы можете использовать этот подход только в выражении, поэтому вы всегда будете иметь код, который каким-то образом использует объект (в вашем примере: просто верните его) и проверит его как null как побочный эффект в той же строке , Я предпочел бы делать явные проверки null и не смешивать с чем-то другим. Библиотека, подобная CuttingEdge.Conditions, может помочь уменьшить количество кода, который вы должны ввести для этого. Вы бы использовали его в своем примере таким образом
Condition.Requires(possibleNull , "possibleNull ").IsNotNull();
return possibleNull;
Да Oded это трюк, мне кажется приятным, но просто хочу другого мнения, спасибо! (+1) Я жду некоторых других, прежде чем пометить их как ответ. –
@FelicePollano - я понимаю. Когда я пишу код, есть несколько вещей, которые мне нравится иметь в виду (поскольку другие читают его). 1. [Принцип наименьшего удивления] (http://en.wikipedia.org/wiki/Principle_of_least_astonishment). 2. Эта цитата: «Всегда указывайте, как будто парень, который заканчивает поддерживать ваш код, будет жестоким психопатом, который знает, где вы живете». Джон Ф. Вудс. – Oded
Ok quote 2) убедил меня отметить ваш как ответ;) –