所以这个问题从之前的帖子开始,我只是想完全理解,然后再转向更复杂的C#内容。
我的问题特别涉及函数的返回值。
考虑以下功能代码:
public static void DisplayResult(int PlayerTotal, int DealerTotal){
if (PlayerTotal > DealerTotal) {
Console.WriteLine ("You Win!");
Console.ReadLine ();
}
else if (DealerTotal > PlayerTotal) {
Console.WriteLine ("Dealer Wins!");
Console.ReadLine ();
} else {
Console.WriteLine ("It is a Draw!");
Console.ReadLine ();
}
我当然错了,但我相信"无效"第一行代码中的关键字表示函数代码结果不返回值。
我想要了解的是 - 该函数计算结果。它根据结果分发文本(例如:"你赢了!"等)。该函数的结果是否被视为值?
通过我自己的(新手)逻辑,我会想到以下两件事之一:
我希望这是有道理的。我认为理解这个概念将使我以后更容易编写函数而无需再次猜测返回值。如果有人有一个实际上会返回一个值的函数的例子,那么也会受到赞赏。
答案 0 :(得分:5)
首先是一些术语:C#没有函数,它有方法。
返回值为方法的调用者提供一些值。它们与该方法中执行的语句无关,但return
语句除外。方法的签名指示该方法返回的类型(如果有)。
public void NoReturnValue()
{
// It doesn't matter what happens in here; the caller won't get a return value!
}
public int IntReturnValue()
{
// Tons of code here, or none; it doesn't matter
return 0;
}
...
NoReturnValue(); // Can't use the return value because there is none!
int i = IntReturnValue(); // The method says it returns int, so the compiler likes this
答案 1 :(得分:4)
正如您所推测的,void
方法是一种不返回任何值的方法。如果你写了:
var myResult = DisplayResult(3, 7)
您会收到错误,因为没有返回值要分配给myResult
。
您的方法将文本输出到控制台。这是该方法的“副作用”,但与其返回值无关。
此外,您的方法与int
交互的事实与其返回值无关。
最后一点。要记住的最基本的事情是返回值是return
关键字之后的值:
return "All done!";
任何不涉及return
关键字的内容都不是返回值。
答案 2 :(得分:0)
调用Console.writeline不会从DisplayResult
方法/函数
你拥有的是3条执行路径,其中只有一条可以发生。在它发生之后,方法/函数返回void而不是字符串
提示:
您可以摆脱Console.WriteLine和.ReadLine并将其替换为return "result of if statment";
,然后调用您的方法/函数,例如Console.WriteLine(DisplayResult(/*params*/));
,这意味着您只需编写Console.WriteLine()/.ReadLine()
一次
public static string DisplayResult(int PlayerTotal, int DealerTotal){
if (PlayerTotal > DealerTotal) {
return "You Win!"
}
else if (DealerTotal > PlayerTotal) {
return "Dealer Wins!";
} else {
return "It is a Draw!" }}
main()
中的:
Console.WriteLine(DisplayResult(playerscore,dealerscore));
Console.ReadLine();