首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stackoverflow异常

stackoverflow异常
EN

Stack Overflow用户
提问于 2009-12-28 19:33:13
回答 7查看 830关注 0票数 2
代码语言:javascript
复制
public static int ExecuteNonQuery(String procedure, params SqlParameter[] args)
{
    if (args == null) throw new ArgumentNullException("args");
    else
    return ExecuteNonQuery(procedure, new SqlParameter[] { });
}

当调用上面的方法时,为什么会得到递归函数并抛出StackOverFlow异常。(当参数包含5个值时)

EN

回答 7

Stack Overflow用户

发布于 2009-12-28 19:35:50

不要混淆空数组和空数组。您再次使用空数组调用相同的方法,但是您必须停止此函数的唯一检查是检查是否有空数组,并抛出异常。你需要这样的东西:

代码语言:javascript
复制
if (args.length == 0) {
   // bail out somehow
}

(在null检查之后,以防止NPE)

票数 8
EN

Stack Overflow用户

发布于 2009-12-28 19:35:35

这是因为重载解析选择相同的ExecuteNonQuery方法,因此您实际上是一遍又一遍地调用相同的方法。

您的方法接受SqlParameterthe params part is just syntactic sugar,并且您再次调用相同的方法,并使用SqlParameter[]作为第二个参数。

票数 3
EN

Stack Overflow用户

发布于 2009-12-28 19:37:05

该函数将无限递归,因为没有终止条件:当使用非空的args参数调用时,它只会使用无穷大的参数调用自身,除了耗尽堆栈空间之外,没有什么可以阻止这种无限递归。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1969052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档