覆盖新的SqlParameter

时间:2016-05-31 13:03:31

标签: c#

我需要检查SqlParameter对象的值并根据特殊标签进行更改。即:[BB] ==>棒球,[FP] ==> Fastpitch。

我可以使用这样的附加功能来实现:

_params.Add(new SqlParameter("@Change", paramCheck(obj.Change)));

我想尝试重写新的SqlParameter方法/函数并在那里运行我的检查。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

好吧,你不能字面上覆盖new SqlParameter因为SqlParameter is sealed,但是你可以创建一个返回新SqlParameter的函数:

public SqlParameter NewSqlParameter(string name, object value) 
{
    return new SqlParameter(name, paramCheck(value));
}

并将其称为:

_params.Add(NewSqlParameter("@Change", obj.Change));

答案 1 :(得分:2)

如何构建扩展方法:

public static void Add(this SqlParameterCollection parms, SomeType obj)
{
    // do some checks

    // add the parameter
}

现在的用法如下:

_params.Add(obj);
如下面的Patrick所述

更新:,这里关注的是如果它来自多种类型,您如何添加参数。如果不了解很多关于应用程序本身的更多信息,就无法知道答案。

但是,如果对象共享一个接口,接口可能就是答案。如果它们是未知对象,反射可能是答案。这两者都难以实施。但是这种扩展方法使您可以灵活地封装该实现。

如果您最终不得不使用反射,Patrick提出了一个很好的担忧,您可能希望将方法的名称更改为AddParamWithCheck,因为此时您将接受object而不是一个众所周知的类型。但是,这并不是暗示 me 来自问题。