我需要检查SqlParameter对象的值,并根据特殊的标签更改它。ie: BB ==>棒球,FP ==>快速投球。
我可以通过这样一个额外的功能来完成这个任务:
_params.Add(new SqlParameter("@Change", paramCheck(obj.Change)));我想尝试重写新的SqlParameter方法/函数,并在那里运行我的检查。我怎么能这么做?
发布于 2016-05-31 13:08:30
好吧,您不能完全覆盖new SqlParameter,因为sealed,但是您可以创建一个返回新SqlParameter的函数
public SqlParameter NewSqlParameter(string name, object value)
{
return new SqlParameter(name, paramCheck(value));
}并称其为:
_params.Add(NewSqlParameter("@Change", obj.Change));发布于 2016-05-31 13:08:02
如何构建一个扩展方法:
public static void Add(this SqlParameterCollection parms, SomeType obj)
{
// do some checks
// add the parameter
}现在它的用法如下所示:
_params.Add(obj);更新:如下面帕特里克所述,如果参数来自多个类型,那么如何添加参数是这里关注的问题。如果不对应用程序本身有更多的了解,就不可能知道答案。
但是,如果对象共享一个接口,则接口可能是答案。如果它们是未知的物体,反射可能是答案。两者都不是很难实现的。但是这个扩展方法为您提供了封装该实现的灵活性。
如果最终不得不使用反射,Patrick提出了一个很好的担忧,即您可能希望将方法的名称更改为类似于AddParamWithCheck的内容,因为此时您将接受一个object而不是一个众所周知的类型。然而,从这个问题中我并没有暗示这一点。
https://stackoverflow.com/questions/37546568
复制相似问题