创建具有多个输出的方法

本文关键字:输出 方法 创建 | 更新日期: 2023-09-27 18:31:39

我只是无法让这种方法工作,我不知道为什么。

视觉对象给我的错误是:

错误 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");
        }
    }
}

创建具有多个输出的方法

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

 laborCost = 0m;
 partsCost = 0m;

您基本上是在作用域中声明一个具有相同名称的新变量。如果编写以下内容,则会发生相同的错误:

 int i = 10;
 int i = 40;

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

因此,如果您有一个带有名为 laborCost 的参数的方法,则不能也定义具有该名称的变量,因为这会冲突。因此,为您的变量或参数指定另一个名称,您将没事的。

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

decimal laborCost = 0m;
decimal partsCost = 0m;
不能声明已

声明为方法参数的同名变量。不过,您可以按如下方式分配值。

laborCost = 0m;
partsCost = 0m;

此外,我认为如果您按如下方式更改 TryParse 会很方便; 因为当结果(十进制。TryParse)是真的。

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

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

使用以下代码,

  //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");
            }
        }
    }

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

类似的东西

laborCost = 0m;
partsCost = 0m;

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