如果语句与Try / Catch进行检查以检查数组边界

时间:2016-09-15 04:27:37

标签: c# multidimensional-array try-catch indexoutofrangeexception

我有一个大的3d数据数组,我将随机读取和写入。按照设计,大约5%的这些操作将超出此阵列的范围,并将以不同的方式处理。这是使用try / catch块的合适位置吗?否则,我需要6个单独的'if'语句来检查数组边界的地址。

也许我在这里尝试微优化,但这些操作可能每秒发生数万次。此外,它会使代码略微清晰。我在这里使用C#,但我想这是一个与语言无关的问题。

1 个答案:

答案 0 :(得分:3)

有趣的是,您的问题一方面是语言独立。

在C,Java,C ++,C#等语言中,人们更喜欢“LBYL”(Look Before You Leap)模式;而像python这样的语言非常强调“EAFP”(宽恕请求宽恕而不是许可)。

含义:在python中,你正在使用try / catch 很多(甚至“count for loop”实现为try / catch);而在C#中你宁愿做if / else。

这些约定非常重要 - 大多数Cx语言程序员只是假设您不使用try / catch来模拟控制流。

但回到你的核心要求:去if / else。正如你所指出的那样,表现非常好可能是一个问题;你只是想避免使用more expensive try / catch解决方案。

如上所述;这样做的好处是,你的代码将“更加主流”;因此,你的代码读者不会每分钟为你提供很多WTF。

code quality by WTFs per minute