如果有更快/更好的优化方式来检查范围内的值是否由另一个值组成?

时间:2018-02-15 19:55:56

标签: c# .net visual-studio

我的朋友和我今天想知道我们是否可以优化部分代码。我找不到任何类似的东西,我的意思是有办法做到这一点,但它与我们所拥有的有点不同,而且从来没有关于优化和范围的改变。 所以当前的代码是:

if (((this.TempMingraph + skok) < Convert.ToInt32(datalegend[0])) ||
   ((this.TempMingraph - skok) > Convert.ToInt32(datalegend[0])))
       this.TempMingraph = Convert.ToInt32(datalegend[0]);

if (((this.TempMaxgraph + skok) < Convert.ToInt32(datalegend[1])) ||
   ((this.TempMaxgraph - skok) > Convert.ToInt32(datalegend[1])))
       this.TempMaxgraph = Convert.ToInt32(datalegend[1]);

if (this.ScaleVoltageFlag)
{
    ActualThread_ChartAxesScaleMinMax(chart, TempMingraph - skok, TempMaxgraph + skok);

说明: 我们有两个来自&#34; outside&#34;的值,我们只能将它们转换为INT32,因为我们需要处理值而不是字符串,这些值是datalegend [0]和datalegend [1]。值始终为整数,范围为几千,永远不等于0.

我们的助手值是:TempMingraph和TempMaxgraph。我们需要检查两者上完全相同但使用不同的值:对于TempMingraph,我们必须使用datalegend [0]的外部值,而对于TempMaxgraph,我们必须使用datalegend [1]的外部值。

所以每个&#34; Temp&#34;总是整数的价值是&#34;基数&#34;一个范围来检查。让我们来看TempMingraph所以要检查的范围是从TempMingraph - skok(skok equals int = 10)到TempMingraph + skok。我们需要检查datalegend [0]是否在该范围内。如果没有,TempMingraph = datalegend [0],这很容易。然后对于TempMaxgraph完全相同,但与datalegend [1]相比。恒定的skok保持不变。最后如果不重要,只需设置新值。这是最好/最快的方式吗?如果没有,你会如何解决它?

1 个答案:

答案 0 :(得分:1)

以下是我可能会这样做的原因 - 由于两个条件都在重复,我会将它们移到一个方法中。此外,一旦只处理int值并删除所有不必要的括号,它们就会简单得多:

this.TempMingraph = CalculateGraphValue(this.TempMingraph, skok, Convert.ToInt32(datalegend[0]));
this.TempMaxgraph = CalculateGraphValue(this.TempMingraph, skok, Convert.ToInt32(datalegend[1]));


private int CalculateGraphValue(int graph, int skok, int datalegend)
{
    return (graph + skok < datalegend || graph - skok > datalegend) ? datalegend : graph;
}

该方法只返回datalegendgraph的值,具体取决于graphskokdatalegend的值。