当然:
int lowIndex = 0;
int highIndex = 1;
if ( end[0].X.ConvertToMillimetres() == end[1].X.ConvertToMillimetres()
&& end[0].Y.ConvertToMillimetres() > end[1].Y.ConvertToMillimetres()
|| end[0].X.ConvertToMillimetres() != end[1].X.ConvertToMillimetres()
&& end[0].X.ConvertToMillimetres() > end[1].X.ConvertToMillimetres())
{
lowIndex = 1;
highIndex = 0;
}
end[0].X.ConvertToMillimetres() != end[1].X.ConvertToMillimetres()
&& end[0].X.ConvertToMillimetres() > end[1].X.ConvertToMillimetres()
将始终等价于end[0].X.ConvertToMillimetres() > end[1].X.ConvertToMillimetres()
,因此:
int lowIndex = 0;
int highIndex = 1;
if ( end[0].X.ConvertToMillimetres() == end[1].X.ConvertToMillimetres()
&& end[0].Y.ConvertToMillimetres() > end[1].Y.ConvertToMillimetres()
|| end[0].X.ConvertToMillimetres() > end[1].X.ConvertToMillimetres())
{
lowIndex = 1;
highIndex = 0;
}
最后,我不确定 ConvertToMillimetres 的结果是什么或它有多复杂/如果 ConvertToMillimetres 使用一些局部变量来捕获这些方法的值以减少计算需要大量时间......不是为了节省一点时间而污染您的本地范围可能不值得。很可能,这是一个相当微不足道的功能,所以它不会很有优势。(end[0] 和 end 1作为局部变量可能会更好,正如 Krishna 所说的那样。或者甚至 end 1 .X 和 end 1 .Y 等。但如果你这样做,不妨保存结果。)
//capture values
var end0Xm = end[0].X.ConvertToMillimetres();
var end1Xm = end[1].X.ConvertToMillimetres();
var end0Ym = end[0].Y.ConvertToMillimetres();
var end1Ym = end[1].Y.ConvertToMillimetres();
//define proper lowIndex, highIndex
int lowIndex = 0;
int highIndex = 1;
if ( end0Xm == end1Xm
&& end0Ym > end1Ym
|| end0Xm > end1Xm )
{
lowIndex = 1;
highIndex = 0;
}
保存测试结果以供将来使用可能会很有用,这也消除了 if 块,这样可以减少将来有人搞砸的机会。但是,您仍然必须有条件地做一些事情。下一个代码块假设您知道并理解C# 的三元运算符。
var end0Xm = end[0].X.ConvertToMillimetres();
var end1Xm = end[1].X.ConvertToMillimetres();
var end0Ym = end[0].Y.ConvertToMillimetres();
var end1Ym = end[1].Y.ConvertToMillimetres();
//define proper lowIndex, highIndex
bool testCase = (end0Xm == end1Xm
&& end0Ym > end1Ym
|| end0Xm > end1Xm);
int lowIndex = testCase? 1 : 0;
int highIndex = testCase? 0 : 1;
或者,也许你更喜欢highIndex = !testcase? 1: 0
,甚至highIndex = 1 - lowIndex
。
等等等等。