Обычная проблема любого языка - утверждать, что параметры, отправленные в метод, соответствуют вашим требованиям, а если нет, отправлять красивые, информативные сообщения об ошибках. Этот вид кода повторяется снова и снова, и мы часто пытаемся создать помощников для него. Однако в 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, но так и не нашел способ обойти это дублирование. Кому-нибудь повезет с этим?
Спасибо!