Распространенной проблемой на любом языке является утверждение, что параметры, отправленные в метод, соответствуют вашим требованиям, а если нет, то отправка красивых информативных сообщений об ошибках. Такой код повторяется снова и снова, и мы часто пытаемся создать для него помощников. Однако в C # кажется, что эти помощники вынуждены иметь дело с некоторым дублированием, навязанным нам языком и компилятором. Чтобы показать, что я имею в виду, позвольте мне представить некоторый необработанный код без помощников, за которым следует один возможный помощник. Затем я укажу на дублирование в помощнике и точно сформулирую свой вопрос.
Во-первых, код без помощников:
public void SomeMethod(string firstName, string lastName, int age)
{
if(firstName == null)
{
throw new WhateverException("The value for firstName cannot be null.");
}
if(lastName == null)
{
throw new WhateverException("The value for lastName cannot be null.");
}
// Same kind of code for age, making sure it is a reasonable range (< 150, for example).
// You get the idea
}
}
Теперь код с разумной попыткой помощи:
public void SomeMethod(string firstName, string lastName, int age)
{
Helper.Validate( x=> x !=null, "firstName", firstName);
Helper.Validate( x=> x!= null, "lastName", lastName);
}
Главный вопрос заключается в следующем: обратите внимание, как код должен передавать значение параметра и имя параметра ("firstName" и имя). Таким образом, в сообщении об ошибке может быть сказано: «Бла-бла-бла, значение параметра firstName». Вы нашли способ обойти это с помощью отражения или чего-то еще? Или способ сделать это менее болезненным?
И в более общем плане, нашли ли вы какие-либо другие способы упростить задачу проверки параметров при одновременном уменьшении дублирования кода?
РЕДАКТИРОВАТЬ: Я читал людей, говорящих об использовании свойства Parameters, но так и не нашел способа обойти дублирование. Кому-нибудь повезло с этим?
Спасибо!
ApplicationException
. - person mmx   schedule 21.03.2009ApplicationException
не рекомендуется. См. Раздел «Примечания» здесь, особенно второй абзац: msdn.microsoft.com / ru-ru / library / - person Ryan Lundy   schedule 14.12.2009