Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当使用我们自己的方法时,是否有方法返回多个选择?_C#_Variables_Methods_Return Value - Fatal编程技术网

C# 当使用我们自己的方法时,是否有方法返回多个选择?

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;

我正在制作一个应用程序,其中用户使用复选框选择一个或两个选项,然后单击“计算”按钮,显示总价

为此,我必须使用我自己的方法,例如,对于Oil和Lube部分,并使用click事件处理程序调用它,以在labelbox中显示值

这是图片:

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
}