我不喜欢这段代码,它过于复杂且不切实际,所以我希望简化它。
我希望它以随机量更改var,我需要在此代码中至少放置150个变量。
//Variable list
public double price1 = 100;
public double price2 = 100;
public double price3 = 100;
public void DaysEnd(){ //Simplified version of inefficient code
var = price1;
HVariation();
price1 = newvar;
var = price2;
HVariation();
price2 = newvar;
var = price2;
MVariation();
price2 = newvar;
var = price3;
LVariation();
price3 = newvar;
}
public void Hvariation(){
newvar = var + (var * (Random.NextDouble(0 - 0.5, 0.5)));
}
public void Mvariation(){
newvar = var + (var * (Random.NextDouble(0 - 0.25, 0.25)));
}
public void Lvariation(){
newvar = var + (var * (Random.NextDouble(0 - 0.1, 0.5)));
}
答案 0 :(得分:2)
这应该让你入门
List<double> values = new List<double> { 100, 100, 200, 500, ... };
values = values.Select(val => Hvariation(val)).ToList();
// now all values have been altered by Hvariation
...
private readonly Random _rand = new Random();
public double Hvariation(double val) {
return val + (val * (_rand.NextDouble(-0.5, 0.5)));
}
答案 1 :(得分:0)
首先要做的是找到重复的代码。例如:
var = price3;
LVariation(); //Different variations
price3 = newvar;
这可以变成一种方法(将变化作为参数)。 要做到这一点,您还需要制作一个默认变体,它采用最小值和最大值:
public void Variation(double min, double max){
newvar = var + (var * (Random.NextDouble(min, max)));
}
然后你可以将它们放在一起以减少代码,看起来像这样:
public double UpdatePrice(double price, double min, double max)
{
var = price;
Variation(min, max);
return newvar;
}
一般情况下,如果我必须多次复制代码(如果复制的数量很大,甚至一次),我将代码转换为方法。
答案 2 :(得分:0)
您可以通过定义三种变体方法,定义变体级别并将其传递到单个方法中来简化此操作。我不确定你是否需要它在数组中或者如果你可以使用列表(在这种情况下列表更可取),但你可以将变量存储在一个数组中,而不是为每个变量定义一个变量名称,根据需要将它们分成逻辑分组。然后,您可以使用LINQ将更改/转换应用于每个阵列。这方面的一个例子是
public enum VariationLevel
{
High,
Medium,
Low
};
public double[] HighVariancePrices =
{
100, 100, 100, 100, 100
};
public double[] MediumVariancePrices =
{
100, 100, 100, 100, 100
};
public double[] LowVariancePrices =
{
100, 100, 100, 100, 100
};
public void DaysEnd()
{
HighVariancePrices = HighVariancePrices.Select(price => GetVariation(price, VariationLevel.High)).ToArray();
MediumVariancePrices = MediumVariancePrices.Select(price => GetVariation(price, VariationLevel.Medium)).ToArray();
LowVariancePrices = LowVariancePrices.Select(price => GetVariation(price, VariationLevel.Low)).ToArray();
}
public double GetVariation(double value, VariationLevel variationLevel)
{
switch (variationLevel)
{
case VariationLevel.High:
return value + (value * (Random.NextDouble(0 - 0.5, 0.5)));
case VariationLevel.Medium:
return value + (value * (Random.NextDouble(0 - 0.25, 0.25)));
case VariationLevel.Low:
return value + (value * (Random.NextDouble(0 - 0.1, 0.5)));
}
}
然而,Random.NextDouble()周围的代码没有编译(因为NextDouble没有参数)所以我不确定你在那里尝试做什么,但是这超出了&#34;我如何简化代码?&#34;希望这会有所帮助。