验证给方法c#的输入参数

时间:2014-09-07 10:56:26

标签: c# validation reflection

所以我有一堆方法,所有这些方法都采用不同数据类型的各种参数,我试图实现的是一种调用另一种方法的方法,传入当前方法的所有参数接受以及它的值,并且在该方法中,我将最终基于参数的数据类型进行不同类型的验证。我的想法是,我将有一个验证方法,我将能够在每个方法的开头调用,而不是通过每个方法并在每个方法中一次验证一个参数。下面是我想要实现的内容的大致轮廓,我环顾四周并且似乎发现了一些用于反射的用法,但它似乎传递了参数类型以及它们的值有点棘手并且是想知道是否有其他人遇到过类似的问题。

public void doStuffA(int a, string b, string c, bool d)
{
    var params = ?
    if (validateInput(params))
    {
        // do stuff
    }
}

public void doStuffB(string x, string y, int z)
{
    var params = ?
    if (validateInput(params))
    {
        // do stuff
    }
}

public bool validateInput(? params)
{
    // do validation
}

2 个答案:

答案 0 :(得分:1)

您应该结帐Enterprise Library Validation Application block。它支持代码,属性和配置验证。

验证应用程序块旨在让您轻松验证对象。在许多情况下,您可以使用一行代码验证对象。您可以使用类中的属性来定义验证规则:

[StringLengthValidator(0, 20)]
public string CustomerName;

除了使用内置验证属性之外,还可以很容易地实现自己的自定义验证器。

答案 1 :(得分:0)

您的问题是一个有效的问题。

也许你可以进行几层验证。 第一层验证将用作默认验证层。 该层将执行验证以处理空值,空字符串等。

我同意这不是业务对象的责任,即使正在评论此帖的人继续主张分离关注点。

关注点的分离是有效的,并且可以通过将此要求视为管理应用程序逻辑而不是业务对象的交叉关注来合理地执行。

在这种情况下,请考虑使用面向方面编程作为解决此问题的技术。

如果您使用的是.NET或WinRT,我相信PostSharp可以为您提供此解决方案。 具体来说,您希望利用此工具提供的OnMethodBoundary方面。 将此属性应用于方法或类时,可以为应用程序提供在方法执行之前和/或方法执行之后执行逻辑的能力。

这种方法将作为参数断言,日志记录,安全性等的解决方案。