На ваш вопрос (почему компилятор жалуется) уже отвечали другие.Однако я хотел бы предложить вам пересмотреть свой дизайн:
bool isOK = SomeClassWithBusinessRules.VerifySomeStuff(idOfStuffToVerify, ref errorMessage);
if (!isOK)
throw new BusinessException(errorMessage ?? "Some error occured.");
}
Поскольку errorMessage
требуется только при возникновении ошибки, зачем вам дополнительное возвращаемое значение?Вы могли бы сократить это до:
string error = SomeClassWithBusinessRules.VerifySomeStuff(idOfStuffToVerify);
if (error != null)
throw new BusinessException(error);
}
(Конечно, тогда у вас больше не возникает случай "Произошла какая-то ошибка". Но показ "бесполезных" сообщений об ошибках в любом случае является плохой практикой.)
Фактически, если ошибка является исключительным обстоятельством (т. Е. Чем-то, что не является частью обычного потока управления, а скорее чем-то, указывающим на ошибку данных или логическую ошибку), может иметь смысл переместить исключение внутри VerifySomeStuff:
// no return value
SomeClassWithBusinessRules.VerifySomeStuff(idOfStuffToVerify);
class SomeClassWithBusinessRules {
void VerifySomeStuff(int id) {
...
if (someCondition)
throw new BusinessException(error);
...
}
}