验证c#方法参数的泛型
因此,我使用博客文章中描述的方法设置C#参数验证。对于验证c#方法参数的泛型,c#,.net,validation,generics,C#,.net,Validation,Generics,因此,我使用博客文章中描述的方法设置C#参数验证。对于字符串,一切都很好,我在其基础上设置了此扩展方法: public static ArgumentEx<T> NotEmptyString<T>(this ArgumentEx<T> arg) where T : class { if (string.IsNullOrWhiteSpace(arg.Value.ToString())) { throw new ArgumentEx
字符串
,一切都很好,我在其基础上设置了此扩展方法:
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;
}
当我尝试像这样调用userId.RequireThat(“userId”).NotZeroOrLess()一样调用它时,就会出现这个错误代码>
类型“int”必须是引用类型才能用作
泛型类型或方法中的参数“T”
就像我说的,执行name.RequireThat(“name”).notemptysting()
工作正常,因为名称
是一个字符串
。我已尝试为泛型指定类型,如下所示:
userId.RequireThat<int>("userId").NotZeroOrLess();
userId.RequireThat(“userId”).NotZeroOrLess();
但我也犯了同样的错误。我必须承认,我不太精通泛型。有人能解释为什么会发生这种错误吗?提前感谢。它会抛出错误,因为您定义了类约束,但int不是一个类,它是一个值类型-struct。阅读基础知识
阅读更多信息。您是否尝试过从扩展方法
中删除其中T:class
,公共静态ArgumentEx notzeroless(此ArgumentEx参数),其中T:class
?就是这样做的,在阅读了Tomas发布的链接之后,我对这些事情有了更全面的理解。然而,删除它会不会在将来引起我应该注意的任何问题?谢谢您提供的Tomas链接。这些事情现在变得更有意义了:)
userId.RequireThat<int>("userId").NotZeroOrLess();