我正在创建一个应用程序,其中用户使用复选框选择一个或两个选项,然后单击计算按钮并显示总价格
为此,我必须使用我自己的方法,例如Oil和Lube部分,并使用click事件处理程序调用它来显示标签框中的值。
以下是PIC:
问题是我想要返回多个选项,一个用于(如果用户选择换油),第二个用于(如果用户选择润滑油作业)和最后一个(如果用户选择了这两个选项),但是我只能返回这两种情况的选择值。
这是我的代码(我自己的方法):
private decimal OilLubeCharges(ref decimal ValueTotal, ref decimal ValueOilChange, ref decimal ValueOilLube )
{
decimal oilChange_var=0m;
decimal lubeJob_var=0m;
decimal oilLube_var=0m;
decimal totalOiltLubeCharges_var = 0m;
if (oilChangeCheckBox.Checked && lubeJobCheckBox.Checked)
{
oilChange_var = 26.00m;
lubeJob_var = 18.00m;
totalOiltLubeCharges_var = oilChange_var + lubeJob_var;
}
else if (oilChangeCheckBox.Checked)
{
oilChange_var = 26.00m;
}
else if (lubeJobCheckBox.Checked)
{
lubeJob_var = 18.00m;
}
return oilChange_var;
}
以下是代码(CALCULATE BUTTON CLICK EVAND HANDLER)
private void calculateButton_Click(object sender, EventArgs e)
{
decimal totalOilLubeChargesAccept_var = 0m;
decimal oilChangeAccept_var = 0m;
decimal oilLubeChangesAccept_var =0m;
decimal storeValue = OilLubeCharges(ref totalOilLubeChargesAccept_var, ref oilChangeAccept_var, ref oilLubeChangesAccept_var );
totalFeesAnsLabelBox.Text = storeValue.ToString();
}
正如您所看到的,我只能使用return语句,例如return oilChange_var
,但totalOiltLubeCharges_var
& lubeJob_var
。
我想找到一种方法,为每种情况返回多个选项(如果是这种情况),然后在用户点击“计算”按钮(IN CLICK EVENT HANDLER)后,在进行其中任一选择后,将值显示在标签框中。
编辑:
使用out参数它会给出错误"必须在out参数离开当前方法之前将其分配给#34;
这是我的方法,带有out参数:
private decimal OilLubeCharges(out decimal ValueTotal, out decimal ValueOilChange, out decimal ValueOilLube )
{
decimal oilChange_var=0m;
decimal lubeJob_var=0m;
decimal oilLube_var=0m;
decimal totalOiltLubeCharges_var = 0m;
if (oilChangeCheckBox.Checked && lubeJobCheckBox.Checked)
{
oilChange_var = 26.00m;
lubeJob_var = 18.00m;
totalOiltLubeCharges_var = oilChange_var + lubeJob_var;
}
else if (oilChangeCheckBox.Checked)
{
oilChange_var = 26.00m;
}
else if (lubeJobCheckBox.Checked)
{
lubeJob_var = 18.00m;
}
return totalOiltLubeCharges_var;
}
这是点击事件方法:
private void calculateButton_Click(object sender, EventArgs e)
{
decimal totalOilLubeChargesAccept_var;
decimal oilChangeAccept_var;
decimal oilLubeChangesAccept_var;
decimal storeValue = OilLubeCharges(out totalOilLubeChargesAccept_var, out oilChangeAccept_var, out oilLubeChangesAccept_var );
totalFeesAnsLabelBox.Text = storeValue.ToString();
答案 0 :(得分:3)
您有多个选项,可以返回:
1- Tuple<decimal,decimal, decimal>
用法:
private Tuple<decimal, decimal, decimal> MyMethod(out decimalValue,
out SomeValue2, out SomeValue3)
{
return Tuple.Create(decimalvariable1, decimalvariable2);
}
2- 创建结构或类
public class DataHolder
{
public decimal OilValue { set; get; }
public decimal SomeValue2 { set; get; }
public decimal SomeValue3 { set; get; }
}
3-使用参数:
private decimal MyMethod(out decimalValue, out SomeValue2, out SomeValue3)
{
// logic here
decimalValue = val1;
SomeValue2 = val12;
SomeValue3 = val3
return decimalValue + SomeValue3;
//Or return SomeValue2;
// Or Whatever decimal variable or value
}
这样称呼:
decimal decimalValue;
decimal SomeValue2;
decimal SomeValue3;
MyMethod(out decimalValue, out SomeValue2, out SomeValue3);
// decimalValue, SomeValue2 and SomeValue3 now hold
// the values that were set inside the method.
检查此工作Example。
答案 1 :(得分:0)
另一种选择是使用动态:
private dynamic OilLubeCharges()
{
// Process oilChange_var, totalOiltLubeCharges_var, lubeJob_var.
return new { oilChange_var, totalOiltLubeCharges_var, lubeJob_var };
}
然后使用:
dynamic storeValue = OilLubeCharges();
totalFeesAnsLabelBox.Text = storeValue.totalOiltLubeCharges_var.ToString();
otherTextBox.Text = oilChange_var.ToString();
yetAnother.Text = lubeJob_var.ToString();
但是当我明白发生了什么时,我会小心使用它,动态会面临更多运行时错误的危险。
C#7 的愿望清单中有一个功能可以解决此问题:
private (decimal oil, decimal oilLube, decimal lube) OilLubeCharges()
{
oil = 0
oilLube = 1
lube = 2
}