-4

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

视觉给我的错误是:

错误 1 ​​不能在此范围内声明名为“laborCost”的局部变量,因为它会给“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");
        }
    }
}
4

5 回答 5

3

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

 laborCost = 0m;
 partsCost = 0m;

您基本上是在范围内声明一个具有相同名称的新变量。如果你这样写,也会发生同样的错误:

 int i = 10;
 int i = 40;
于 2013-09-16T14:57:03.940 回答
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");
        }
    }
于 2013-09-16T15:39:24.997 回答
1

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

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

于 2013-09-16T14:57:07.567 回答
0

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

就像是

laborCost = 0m;
partsCost = 0m;

没有前面的十进制类型声明。

于 2013-09-16T14:58:04.423 回答
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");
            }
        }

    }
于 2013-09-16T14:57:38.587 回答