用于验证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();

但我也犯了同样的错误。我不得不承认,我对仿制药不是很精通。有人能解释为什么会出现这种错误吗?提前谢谢。

用于验证c#方法参数的泛型

您是否尝试从扩展方法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作为泛型约束?了解更多信息。