1. 入门
想象一下:你打电话点披萨(或者用App,毕竟21世纪了)。你告诉接线员你的订单参数,然后接线员把结果——披萨——送给你!如果接线员啥都不说——你就饿着,哪有幸福可言。
函数也是这样:有时候它们只是做点事,但很多时候你还希望函数能返回点有用的东西,而且每次输入不一样,结果也可能不一样!比如:
- 函数计算两个数的和,然后把结果告诉你。
- 函数接收一个人的年龄,返回类别("小孩", "成年人", "退休人员")。
- 函数生成一条漂亮的欢迎语,按用户名来打招呼。
返回值——就是函数把自己工作的结果“传递”到外面的一种方式。
2. 带返回值的方法签名
上一节我们见过这样的模板:
void PrintHello()
{
Console.WriteLine("你好!");
}
void类型表示函数啥都不返回(void意思是“空”,没有值)。
现在来看看一个有返回值的函数长啥样:
int Add(int a, int b)
{
// 函数体
}
这里int在函数名前面——就是返回值的数据类型。比如函数要返回字符串就写string,要返回小数就写double,以此类推。
函数声明的语法长这样:
<返回值类型> 方法名(<参数>)
{
// 函数体
}
不同签名的例子:
| 签名 | 返回什么 |
|---|---|
|
整数 |
|
字符串 |
|
小数 |
|
布尔值 |
3. return操作符:怎么从函数里返回结果
想让一切顺利运行,光写对类型还不够——你得让函数把结果“送”回去。这个活就靠return操作符return。它的作用就是:我把这个值返回了,函数到这就结束了(就像“跳出去”一样)。
类型 方法名(...)
{
// 一些计算
return 值;
}
例子:
int Add(int a, int b)
{
int sum = a + b;
return sum; // 把sum作为函数结果返回
}
重要规则:通过return返回的值类型,必须和你在方法签名里写的类型完全一样(或者兼容)。
4. 例子:写几个有返回值的方法
直接上例子!看看常见的几种情况。
例子1:两个数相加
int Add(int a, int b)
{
return a + b;
}
// 用法:
int result = Add(10, 20);
Console.WriteLine("和: " + result); // 输出: 和: 30
例子2:个性化问候
string CreateGreeting(string name)
{
return "你好, " + name + "!";
}
// 用法:
string greeting = CreateGreeting("安娜");
Console.WriteLine(greeting); // 输出: 你好, 安娜!
例子3:判断是否成年
bool IsAdult(int age)
{
return age >= 18;
}
if (IsAdult(21))
{
Console.WriteLine("允许进入。");
}
else
{
Console.WriteLine("不好意思,只限成年人。");
}
// 输出: 允许进入。
例子4:返回值在表达式里的用法
Console.WriteLine("两倍: " + MultiplyByTwo(7));
int MultiplyByTwo(int n)
{
return n * 2;
}
5. 返回值类型:多样性和特点
在C#里,函数可以返回任何“类型”(不只是数字、字符串这些常见的)。举几个例子:
- 整数: int, long, short——都很简单。
- 小数: double, float, decimal。
- 字符串: string。
- 布尔值: bool。
- 数组: int[], string[]等等。
- 引用类型: 你自己写的类的对象。
- void: 特殊情况,啥都不返回。
为啥返回值类型这么重要?
编译器会死死盯着你,确保你返回的东西和你承诺的一样。如果你说要返回int,结果返回了字符串或者啥都没返回——直接报错。就像个很严的老板。
错误例子:
int GetNumber()
{
return "42"; // 错误!应该返回int,不是string。
}
6. return不带值:用于void方法
说句公道话,在声明了返回类型的方法里(比如int、string),return后面必须跟你想返回的值。
但是!如果函数声明的是void类型,你还是可以用return,但不用带值——这样可以立刻结束函数执行。
void PrintNumbers(int n)
{
if (n <= 0)
{
Console.WriteLine("数字不能是负数!");
return; // 直接退出函数,不返回任何东西
}
for (int i = 1; i <= n; i++)
{
Console.WriteLine(i);
}
}
这种用法很方便,比如你想在某个条件下提前结束函数,但又不需要返回值。
7. 用return时常见的错误
哎,初学者经常会被return相关的错误搞晕!
问题1:函数应该返回东西却没写return
int GetValue(bool flag)
{
if (flag)
return 1;
// 哎!如果flag == false呢?
}
// 错误:不是所有代码分支都有return!
解决办法:保证所有执行路径都有return!比如:
int GetValue(bool flag)
{
if (flag)
return 1;
else
return 0;
}
问题2:返回值类型不匹配
double GetMagicNumber()
{
return 42; // 其实没问题(int可以自动转成double)
// 但如果函数要返回int,你却返回了字符串——就会报错!
}
规则:注意类型兼容。如果不确定,可以手动转换成需要的类型:
return (double)42;
问题3:return用早了
记住,一旦执行了return,方法就立刻结束了。后面的代码都不会再执行!
int GetNumber()
{
return 5;
Console.WriteLine("这行代码永远不会被执行"); // 编译器会直接报错!
}
问题4:void方法里return带值(禁止!)
void PrintSomething()
{
return 1; // 不能在void方法里返回值!
}
GO TO FULL VERSION