用于验证c#方法参数的泛型
本文关键字:泛型 参数 方法 验证 用于 | 更新日期: 2023-09-27 18:25:53
所以我使用本文中描述的方法设置了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();
但我也犯了同样的错误。我不得不承认,我对仿制药不是很精通。有人能解释为什么会出现这种错误吗?提前谢谢。
您是否尝试从扩展方法public static ArgumentEx<T> NotZeroOrLess<T>(this ArgumentEx<T> arg) where T : class
中删除where T : class
?
它抛出错误,因为您定义了类约束,但int不是类,而是值类型-struct。阅读基础知识http://msdn.microsoft.com/en-us/library/d5x73970.aspx.
阅读为什么可以';我是否使用System.ValueType作为泛型约束?了解更多信息。