创建具有多个输出的方法

时间:2013-09-16 14:55:07

标签: c# visual-studio

我无法让这种方法起作用,我不知道为什么。

视觉给我的错误是:

  

错误1名为' laborCost'的局部变量不能在此范围内声明,因为它会对“劳动成本”赋予不同的含义,而劳动成本已经在父母或当前的“父母”中使用。范围来表示别的东西

这就是我想要的: 它似乎并不希望我在方法中使用与描述中相同的var,但该方法如何知道返回什么?

//adds together any other charges from partsLaborGroupBox this is an output method
private void OtherCharges(TextBox partsTextBox,TextBox laborTextBox, out decimal laborCost, out decimal partsCost)
{
    decimal laborCost = 0m;
    decimal partsCost = 0m;


    //this chain goes through the partsLaborTextBox and checks to see if there is input, if so it gets the input 
    //if input is not valid it will display a message. 
    if (!string.IsNullOrEmpty(partsTextBox.Text))
    {
        if(decimal.TryParse(partsTextBox.Text, out partsCost))
        {
            //do nothing
        }
        else
        {
            MessageBox.Show("Invalid input for parts");
        }
    }
    if (!string.IsNullOrEmpty(laborTextBox.Text))
    {
        if(decimal.TryParse(laborTextBox.Text, out laborCost))
        {
            //dont need to do anything. 
        }
        else
        {
            MessageBox.Show("Invalid input for labor");
        }
    }
}

5 个答案:

答案 0 :(得分:3)

删除方法顶部的变量声明(它们在方法定义中声明):

 laborCost = 0m;
 partsCost = 0m;

您基本上是在范围内声明一个名称相同的新变量。如果你写:

会发生同样的错误
 int i = 10;
 int i = 40;

答案 1 :(得分:1)

您可以拥有多个out参数,但不能声明与范围内的另一个名称相同的变量。

因此,如果您有一个名为laborCost的参数的方法,则不能使用该名称定义变量,因为这会发生冲突。所以给你的变量或你的参数另一个名字,你会没事的。

答案 2 :(得分:1)

删除方法内的变量声明。意味着,从代码中删除;

decimal laborCost = 0m;
decimal partsCost = 0m;

您不能声明具有已声明为方法参数的相同名称的变量。不过,您可以按如下方式指定值。

laborCost = 0m;
partsCost = 0m;

此外,我认为如果你改变下面的TryParse会很方便;因为当(decimal.TryParse)的结果为真时你不会做任何事情。

    if (!string.IsNullOrEmpty(partsTextBox.Text))
    {
        if(!decimal.TryParse(partsTextBox.Text, out partsCost))
        {
            MessageBox.Show("Invalid input for parts");
        }
    }

答案 3 :(得分:0)

您的参数和本地值具有相同的名称。

使用以下代码,

  //adds together any other charges from partsLaborGroupBox this is an output method
    private void OtherCharges(TextBox partsTextBox,TextBox laborTextBox, out decimal laborCost, out decimal partsCost)
    {
        laborCost = 0m;
        partsCost = 0m;


        //this chain goes through the partsLaborTextBox and checks to see if there is input, if so it gets the input 
        //if input is not valid it will display a message. 
        if (!string.IsNullOrEmpty(partsTextBox.Text))
        {
            if(decimal.TryParse(partsTextBox.Text, out partsCost))
            {
                //do nothing
            }
            else
            {
                MessageBox.Show("Invalid input for parts");
            }
        }
        if (!string.IsNullOrEmpty(laborTextBox.Text))
        {
            if(decimal.TryParse(laborTextBox.Text, out laborCost))
            {
                //dont need to do anything. 
            }
            else
            {
                MessageBox.Show("Invalid input for labor");
            }
        }

    }

答案 4 :(得分:0)

您需要更改参数列表中的laborCost声明或将方法更改为其他名称,或者您需要删除声明部分,并使其成为纯粹的赋值,

这样的东西
laborCost = 0m;
partsCost = 0m;

不包含前面的十进制类型声明。