Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# - Fatal编程技术网

C# 参数化方法的返回值?

C# 参数化方法的返回值?,c#,C#,我是C#新手,我不确定我是否了解参数化方法的使用。下面我添加了一些代码,这些代码是在我将要开发的任务中给出的。这是一个简单的GUI,带有一些要求名称和价格的文本框 第一行代码调用该方法,布尔变量inputOk需要一个true或false值,out参数也会“返回”一些值 在第二行代码中,我想,尽管名称和价格“返回”,我还是需要返回true或false才能让第一行代码正常工作?我只是想确定我能理解。由于我可以从文本框(如txtName.text)中获取输入值,所以在调用方法时不需要添加这个值?谢谢

我是C#新手,我不确定我是否了解参数化方法的使用。下面我添加了一些代码,这些代码是在我将要开发的任务中给出的。这是一个简单的GUI,带有一些要求名称和价格的文本框

第一行代码调用该方法,布尔变量inputOk需要一个true或false值,out参数也会“返回”一些值

在第二行代码中,我想,尽管名称和价格“返回”,我还是需要返回true或false才能让第一行代码正常工作?我只是想确定我能理解。由于我可以从文本框(如txtName.text)中获取输入值,所以在调用方法时不需要添加这个值?谢谢

bool inputOk = ReadAndValidateInput(out customerName, out seatPrice);

private bool ReadAndValidateInput(out string name, out double price)

简单地说,是的,你在所有方面都是对的,但我确实认为你可能需要温习一下你的术语;方法的返回值是
return
ed,而括号中的内容是参数;当您调用方法时,它们被称为参数

了解更多细节

最好从第二行开始

布尔值是从方法返回的。
name
price
参数保证通过该方法进行修改(因为它们是
out
,如果它们是
ref
,则可能会被修改);而且,虽然可以将它们视为额外的返回值,但实际上机制完全不同:它们只是被称为输出参数

编辑-关于“输出参数”

输出参数仍然可以用来传递值(因此它们实际上是输入/输出)。然后,接收参数的方法必须确保它随后写入参数(因为它是
out

结束编辑

如果该方法是在一个表单类中编写的,该类拥有一个textbox,那么,是的,您可以简单地使用textbox变量,而不必传入它;因为该方法是一种“实例方法”(与没有此的
静态
相反),并且变量属于表单的同一实例


在第一行,yes-inputOk通过调用方法接收布尔返回值-将
customerName
seatPrice
作为输出参数传递。方法返回后,假设没有异常发生,inputOk将设置为方法的返回值;这两个参数将接收由
ReadAndValidateInput
方法调用设置的值。

想象一下这样的情况,
ReadAndValidateInput
不仅会验证输入,还会进行一些计算并返回其他值,例如折扣。这就是您需要输出参数的地方

double discount = 0;

if(ReadAndValidateInput(customerName, seatPrice, out discount))
{
   //do something with discount. You know that input was valid
}
else
{  // do not touch discount. User has not entered valid values
}

若调用的方法不更改值或不生成除返回值以外的新值,则不需要输出参数。您是对的-可以通过调用代码访问原始值。

您通常应将其称为:

string name;
double price;
bool inputOk = ReadAndValidateInput(out customerName, out seatPrice);
所有三个变量都将在ReadAndValidateInput中获得赋值。 在C++中,不可能返回多个值,而“OUT”关键字则是使用的替代品。
但是,如果可能,最好避免。您还可以使用两个附加的get函数返回客户姓名和座位价格。

非常奇怪的术语。大多数方法都有参数。谢谢你提供的信息。我想知道第一行代码。当我使用out customerName,out seatPrice时,它们是否也会像普通调用一样工作,这样我就可以在方法中使用customerName和seatPrice的值,或者它们只是等待将新值返回到调用中?我最初对此有一句话,但我把它删掉了,因为我认为这会混淆问题。是-可以使用这些参数将值传递到方法中。例如,如果该方法是为了保证
customerName
中的空格被删除,则可以传入预先验证的名称,并在该方法中执行
name=name.Trim()
。当该方法返回时,调用方的
客户名称将被修剪。