C# 当使用我们自己的方法时,是否有方法返回多个选择?
我正在制作一个应用程序,其中用户使用复选框选择一个或两个选项,然后单击“计算”按钮,显示总价 为此,我必须使用我自己的方法,例如,对于Oil和Lube部分,并使用click事件处理程序调用它,以在labelbox中显示值 这是图片:C# 当使用我们自己的方法时,是否有方法返回多个选择?,c#,variables,methods,return-value,C#,Variables,Methods,Return Value,我正在制作一个应用程序,其中用户使用复选框选择一个或两个选项,然后单击“计算”按钮,显示总价 为此,我必须使用我自己的方法,例如,对于Oil和Lube部分,并使用click事件处理程序调用它,以在labelbox中显示值 这是图片: private decimal MyMethod(out decimalValue, out SomeValue2, out SomeValue3) { // logic here decimalValue = val1;
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
}
(仅考虑机油和润滑油以及总费用)
问题是我想返回多个选择,一个用于(如果用户选择了机油更换),第二个用于(如果用户选择了润滑油作业)和最后一个(如果用户同时选择了这两个选项),但我只能返回这两种情况下的选择值
这是我的代码(我自己的方法):
这是代码(计算按钮单击事件处理程序)
如您所见,我只能使用return语句,例如,returnoilchange\u var
,但是totalOiltLubeCharges\u var
&lubeJob\u var
呢
我想找到一种方法,为每种if情况返回多个选择,然后在用户做出这些选择后单击“计算”按钮(在单击事件处理程序中)时,将值显示在标签框中
编辑:
对于out参数,它给出了一个错误“在离开当前方法之前必须将out参数指定给”
下面是我的带有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();
您有多个选项,可以返回: 1-
元组
用法:
private Tuple<decimal, decimal, decimal> MyMethod(out decimalValue,
out SomeValue2, out SomeValue3)
{
return Tuple.Create(decimalvariable1, decimalvariable2);
}
3-使用out参数:
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.
检查此工作。另一个选项是使用动力学:
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();
但是我会在清楚发生了什么的时候小心地使用它,dynamics会暴露出更多运行时错误的危险
C#7的愿望列表中有一个功能可以解决这个问题:
private (decimal oil, decimal oilLube, decimal lube) OilLubeCharges()
{
oil = 0
oilLube = 1
lube = 2
}
是的,使用
元组
类:您应该创建并使用一个结构来保存您的值。@codygray 100%面向对象编程RUSHES-散热器Rush?为什么要返回多个值?您的方法查看用户选择的内容并返回其成本。这是一个值。@Ninja您希望它返回什么?您已经在输出参数中返回了3个值。您可以选择其中一个在方法中返回。或者返回一个布尔值作为状态。是你叫的。@Ninja怎么了?如果使用out参数,则必须在方法内部设置所有前面带有out的参数,否则会出现编译时错误。您可以使用return
关键字返回您想要的任何内容。@Ninja您必须为方法中的所有ValueTotal
、ValueOilChange
和ValueOilLube
分配一个值,否则您将得到编译时错误。@Ninja您没有将ValueTotal
设置到方法中的任何值。那它的目的是什么?"?????如果不强制设置值,请使用ref
而不是out
检查ref example@Ninja我想您可能混淆了oilChange\u var
和ValueOilChange
。如果两者相同,请删除oilChange\u var
并仅使用ValueOilChange
。
dynamic storeValue = OilLubeCharges();
totalFeesAnsLabelBox.Text = storeValue.totalOiltLubeCharges_var.ToString();
otherTextBox.Text = oilChange_var.ToString();
yetAnother.Text = lubeJob_var.ToString();
private (decimal oil, decimal oilLube, decimal lube) OilLubeCharges()
{
oil = 0
oilLube = 1
lube = 2
}