我需要检查SqlParameter对象的值并根据特殊标签进行更改。即:[BB] ==>棒球,[FP] ==> Fastpitch。
我可以使用这样的附加功能来实现:
_params.Add(new SqlParameter("@Change", paramCheck(obj.Change)));
我想尝试重写新的SqlParameter方法/函数并在那里运行我的检查。我怎么能这样做?
答案 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 来自问题。