Общей проблемой на любом языке является утверждение, что параметры, отправленные в метод, отвечают вашим требованиям, а если нет, то отправлять приятные информационные сообщения об ошибках. Этот код повторяется снова и снова, и мы часто пытаемся создать для него помощники. Однако в С# кажется, что эти помощники вынуждены иметь дело с некоторым дублированием, навязанным нам языком и компилятором. Чтобы показать, что я имею в виду, позвольте мне представить некоторый сырой код без помощников, за которым следует один из возможных помощников. Затем я укажу на дублирование в помощнике и точно сформулирую свой вопрос.
Во-первых, код без каких-либо помощников:
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). Это значит, что сообщение об ошибке может сказать: "Бла-бла-бла-значение для параметра firstName". Вы нашли какой-либо способ обойти это с помощью отражения или чего-нибудь еще? Или способ сделать это менее болезненным?
И в общем, нашли ли вы какие-либо другие способы оптимизации этой задачи проверки параметров при одновременном уменьшении дублирования кода?
EDIT: я читал, что люди говорили об использовании свойства Parameters, но так и не нашли способ дублирования. Кому-нибудь повезло с этим?
Спасибо!