gpt4 book ai didi

c# - 使用 Catch block 返回,坏主意?

转载 作者:太空宇宙 更新时间:2023-11-03 17:07:25 24 4
gpt4 key购买 nike

这可能是个愚蠢的问题,但我对使用 try/catch block 的性能很感兴趣。

我有一个 DataGrid,它将 Converter 分配给 DataGridCell 的背景属性。在转换器中,我将今年的数据值与去年的数据进行比较;如果今年的数据 > 3%,我返回绿色背景;如果它 > 0% 且 < 3%,我返回黄色;如果 < 0%,我返回红色:

string x = values[0].ToString().Replace("$", "").Replace(",", ""); //This year's number
string y = values[1].ToString().Replace("$", "").Replace(",", ""); //Last year's

result = (((float.Parse(x) * 100) / float.Parse(y)) - 1) * 100;

if (result >= 3)
return Brushes.LimeGreen;
else if (result >= 0)
return Brushes.Yellow;
else
return Brushes.Red;

但是,在某些情况下,单元格不会有去年的值;正如您猜到的那样,除以 0(或单元格为空时转换器似乎收到的某些文本)是一个非常糟糕的主意,并且会引发异常。因此,我决定处理这个问题的最简单方法是:

try
{
result = (((float.Parse(x) * 100) / float.Parse(y)) - 1) * 100;
}
catch
{
return Brushes.DarkOrange;
}

因此,如果抛出异常(因此没有可比较的值),则返回一个 Orange 并收工。 (编辑:是的,我确实希望在没有可比较的值时返回 Orange。

目前,我可以预测它暂时只会发生在一行数据上,因此在填充时它只会捕获大约 10 个单元格。但随着 future 的发展,它有可能发生更多次。

try/catch block 是处理这个问题的最简单和最快捷的方法(据我所知),但它显然不是唯一的方法,特别是因为我知道错误。那么在这种情况下使用 try/catch block 是个坏主意吗?坏主意,我的意思是它会降低性能,因为它迭代了很多很多次吗?鉴于我知道错误是什么,我应该抢占它,还是使用 try/catch block 好?

最佳答案

这是个坏主意。这不是特殊情况,所以不要像处理它一样处理它。你担心性能和异常处理的事实是你做错事的味道。有一个非常简单的方法来处理这个问题,所以我什至不明白为什么你曾经想过使用异常处理来处理它。

是的,它会影响您的表现,但这不应该是您关心的问题。您关心的应该是编写此逻辑的最清晰方式是什么,而使用异常显然不是这种方式。

这是一个简单的方法:

double value;
if(!Float.TryParse(y, out value) || value == 0f) {
return Brushes.DarkOrange;
}
else {
double result = (((float.Parse(x) * 100) / value) - 1) * 100;
if (result >= 3) {
return Brushes.LimeGreen;
}
else if (result >= 0) {
return Brushes.Yellow;
}
else {
return Brushes.Red;
}
}

关于c# - 使用 Catch block 返回,坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com