如何在c#中尝试catch,以便在try catch
中执行sql查询有时count的值为0,并且它会将错误除以零错误。 因此当它抛出除以零错误时,我必须执行一个sql语句来删除该语句,并且循环必须继续获取下一条记录的值。我该怎么做。
double value = (read * 100 / count);
答案 0 :(得分:28)
为什么在只测试count
的值是否等于0时执行try / catch:
if (count != 0)
{
// perform the division only if count is different than 0,
// otherwise we know that it will throw an exception
// so why even attempting it?
double value = (read * 100 / count);
}
答案 1 :(得分:3)
这是条件逻辑,不应该由异常处理。在操作之前检查count的值并相应地执行sql语句。
答案 2 :(得分:3)
你可以这样试试..
这是示例
namespace nsDivZero
{
using System;
public class DivZero
{
static public void Main ()
{
// Set an integer equal to 0
int IntVal1 = 0;
// and another not equal to zero
int IntVal2 = 57;
try
{
Console.WriteLine ("{0} / {1} = {2}", IntVal2, IntVal1, IntResult (IntVal2, IntVal1) / IntResult (IntVal2, IntVal1));
}
catch (DivideByZeroException e)
{
Console.WriteLine (e.Message);
}
// Set a double equal to 0
double dVal1 = 0.0;
double dVal2 = 57.3;
try
{
Console.WriteLine ("{0} / {1} = {2}", dVal2, dVal1, DoubleResult (dVal2, dVal1));
}
catch (DivideByZeroException e)
{
Console.WriteLine (e.Message);
}
}
static public int IntResult (int num, int denom)
{
return (num / denom);
}
static public double DoubleResult (double num, double denom)
{
return (num / denom);
}
}
}
答案 3 :(得分:1)
我更喜欢将double.Epsilon
添加到分隔符,而不是使用if语句或try / catch语句。如果使用浮动,您也可以使用float.Epsilon
。它代表大于零的最小可能数,它不会真正影响您的结果。我在生成报告和图表时使用它
double value = (read * 100 / (count + double.Epsilon));
答案 4 :(得分:0)
在这种情况下,不要使用try catch,而不是检查计数是否为0更好。
if (count == 0)
{
DeleteStatement();
continue;
}
double value = (read * 100 / count);
答案 5 :(得分:0)
这种类型的异常在Java中称为RuntimeException(我知道这是C#),这意味着它应该首先被阻止,而不是捕获。只测试计数不是0。
答案 6 :(得分:0)
if (count > 0)//as suggested by sasjaq
{
double value = (read * 100 / count);
}
似乎是一种很好的方法。使用try catch可能会显着降低性能......
答案 7 :(得分:-1)
如果您传递的值很可能是0,并且正在对其进行除法,则可以通过执行以下操作来解决该问题:
int x = 0;
int z = 1300;
如果除以0,您将传递无穷大的值,否则您将根据分度传递您想要的正确量!
int result = x == 0 ? 99999 : x / z;
Console.WriteLine(result);