Я не считаю это хорошей практикой.
Во-первых, сам метод расширения просто вводит метод для чего-то, для чего у нас уже есть ключевое слово: throw.Это может сбивать с толку.Он объявляет тип возвращаемого значения, хотя никогда не будет возвращать значение, просто чтобы угодить компилятору в контексте, где вы хотите его использовать.Ссылаясь на то, что уже указывали другие, это скорее «принцип удивления».
Затем, глядя на то, как вы будете использовать этот метод, полученный код кажется не очень понятным для чтения.Еще хуже: вы можете использовать этот подход только в выражении, так что вы всегда будете в конечном итоге иметь код, который каким-либо образом использует объект (в вашем примере: просто вернуть его) и проверяет его на null как побочный эффект в той же строке,Я предпочел бы делать нулевые проверки явно и не смешиваться с чем-то другим.Библиотека, подобная CuttingEdge.Conditions , может помочь уменьшить объем кода, который вы должны напечатать для этого.Вы бы использовали это в своем примере таким образом
Condition.Requires(possibleNull , "possibleNull ").IsNotNull();
return possibleNull;