Итак, я настроил проверку параметров C #, используя метод, описанный в этом сообщении в блоге. Все отлично работает для strings
, для которого у меня есть установка этого метода расширения на основе всего этого:
public static ArgumentEx<T> NotEmptyString<T>(this ArgumentEx<T> arg) where T : class
{
if (string.IsNullOrWhiteSpace(arg.Value.ToString()))
{
throw new ArgumentException(string.Format("{0} cannot be empty.", arg.Name));
}
return arg;
}
Однако, когда я пытаюсь добавить метод расширения для ints
, чтобы определить, меньше или равны ли они нулю, например:
public static ArgumentEx<T> NotZeroOrLess<T>(this ArgumentEx<T> arg) where T : class
{
if (Convert.ToInt32(arg.Value.ToString()) <= 0)
{
throw new ArgumentException(string.Format("Please make sure {0} is greater than zero.", arg.Name));
}
return arg;
}
Я получаю эту ошибку, когда пытаюсь назвать ее так userId.RequireThat("userId").NotZeroOrLess();
Тип int должен быть ссылочным типом, чтобы использовать его как
параметр 'T' в универсальном типе или методе
Как я уже сказал, выполнение name.RequireThat("name").NotEmptyString();
работает нормально, так как name
- это string
. Я попытался указать тип для универсального, например, так:
userId.RequireThat<int>("userId").NotZeroOrLess();
Но я получаю ту же ошибку. Я должен признать, я не слишком хорошо разбираюсь в дженериках. Может кто-нибудь объяснить, почему эта ошибка происходит? Спасибо заранее.