public static int ExecuteNonQuery(String procedure, params SqlParameter[] args)
{
if (args == null) throw new ArgumentNullException("args");
else
return ExecuteNonQuery(procedure, new SqlParameter[] { });
}当调用上面的方法时,为什么会得到递归函数并抛出StackOverFlow异常。(当参数包含5个值时)
发布于 2009-12-28 19:35:50
不要混淆空数组和空数组。您再次使用空数组调用相同的方法,但是您必须停止此函数的唯一检查是检查是否有空数组,并抛出异常。你需要这样的东西:
if (args.length == 0) {
// bail out somehow
}(在null检查之后,以防止NPE)
发布于 2009-12-28 19:35:35
这是因为重载解析选择相同的ExecuteNonQuery方法,因此您实际上是一遍又一遍地调用相同的方法。
您的方法接受SqlParameterthe params part is just syntactic sugar,并且您再次调用相同的方法,并使用SqlParameter[]作为第二个参数。
发布于 2009-12-28 19:37:05
该函数将无限递归,因为没有终止条件:当使用非空的args参数调用时,它只会使用无穷大的参数调用自身,除了耗尽堆栈空间之外,没有什么可以阻止这种无限递归。
https://stackoverflow.com/questions/1969052
复制相似问题