【问题标题】:Can i do this on return to handle Exception我可以在返回时执行此操作以处理异常吗
【发布时间】:2012-05-16 07:49:08
【问题描述】:

在我的函数中,我返回一个由方法返回的数据表

MyDatatable(sqlQuery, connection ),

但它可能会产生一些会引发错误的异常我可以做这样的事情

return  try {cmn.MyDatatable(qry, con)} catch(Exception ex){null};

我不想这样做

DataTable dt =null;
try{
dt = cmn.MyDatatable(qry, con);
}catch().....
return dt==null ? null :dt;

【问题讨论】:

  • 为什么不在MyDatatable 中施展魔法,如果它失败了,方法必须返回空仪式?
  • 你说得对,我的朋友,但你不认为如果没有数据被获取,那么它也会返回 null 我将如何处理它

标签: c# datatable return try-catch


【解决方案1】:

您的语法非常错误。你可以这样做:

try
{
    return cmd.MyDatatable(qry, con);
}
catch(Exception ex)
{
    return null;
}

虽然我怀疑你想吞下所有个例外。

【讨论】:

  • 对不起,你不能有一个单行。
  • @Photon 以防您将来使用 PHP,它有一个衬里:return @cmd.MyDataTable(qry, con)。它吞下了所有异常,所以这类似于try { return method(); } catch { return null; }
【解决方案2】:

IMO,最好的办法就是这样做:

{
  object l_oOutDatatable = null;
  try
  {
    oOutDatable = cmd.MyDatatable(qry, con);
  }
  catch(Exception e)
  {
    log.Message(e.ToString);
  }

  return l_oOutDatatable;
}

您必须始终管理异常,因为它们必须有充分的理由被抛出;)。此外,在每个方法中都有一个返回被认为是一种好习惯。

另外,你可以使用??关键字:这个关键字的意思是如果它为空则返回值或其他东西。例如:c = a ?? b 与此类似:c = (a!=null) ? a : b;

【讨论】:

  • 我可能只是我自己,但是在相同的上下文中看到一个空的 catch 块和 best 这个词时我会遇到一些问题。
  • 留下一个空的catch不是最佳做法,你应该对异常做点什么,记录它,返回它。
  • 是的,我更新了 :) 但我只是想强调语法选项。
  • 我通常会记录它并在抛出异常以管理错误之前允许几次尝试。就像尝试连接 3 次之类的东西。
【解决方案3】:

您应该将异常一直返回给调用此代码的客户端。由客户端来处理异常。

请记住,您应该只在您期望它们发生的地方捕获异常,例如尝试连接到数据库或将文件写入磁盘等。

您还应该使您的异常捕获尽可能具体,以捕获通常在您获取数据集时发生的已知异常。

try
{
    return cmd.MyDatatable(qry, con);
}
catch(Exception ex)
{
    //Log exeption
    Throw ex
}

如果这只是在没有结果时处理空数据表的检查,那么您应该测试它们是否为空或已填充。如果它是您的应用程序返回空数据表的能力的一部分,这将是一个更好的解决方案。

var dataTableResult = cmd.MyDatatable(qry, con);
if ( dataTableResult != null)
{
    return dataTableResult;
}

return null;

【讨论】:

  • 使用空的throw 在 C# 中重新引发异常。 throw ex 是你在 Java 中的做法。
  • @zmbq throw ex 将重新抛出已处理的异常。如果你在 c# 中有一个无参数的 catch 块,你可以使用 throw
  • 在任何区块中投掷作品。 throw ex 将覆盖 ex 中的堆栈跟踪。
猜你喜欢
  • 2018-07-24
  • 2010-10-29
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多