CodeGym /课程 /C# SELF /C#中的三元运算符:简洁条件和小细节

C#中的三元运算符:简洁条件和小细节

C# SELF
第 3 级 , 课程 5
可用

1. 表达式 vs 语句

在C#里,所有的代码分两类:语句Statement)和表达式Expression)。语句一般说是“执行”,表达式说是“计算”。但这不是最重要的。

最关键的区别:表达式有计算结果。这个结果有类型,你可以把它赋值给变量,或者在别的表达式里用。

举个例子:

代码 备注
int x;
语句
(a < 10)
表达式,类型是bool
i++;
表达式,类型和变量i一样
x = 5;
表达式,类型和变量x一样

这对我们有啥用?

其实很多语句其实也是表达式(有计算结果)。比如,这样写完全没问题:
int x, y, z;
x = y = z = 1; 	// x = (y = (z = 1));
如果你不需要表达式的结果,可以直接无视它:
Console.ReadLine();	// 忽略输入的结果

这很方便,尤其是表达式除了结果还能干点别的事(比如输出到屏幕或者读输入)。

2. 三元运算符

C#里有个特别的三元(也叫三目)运算符。它其实就是if–else的简写版:


条件 ? 表达式1 : 表达式2;
三元运算符的语法

如果条件为真,就计算表达式1,否则就计算表达式2。条件后面跟?,两个表达式之间用:分开。

if-else最大的不同:三元运算符是表达式,它的结果可以赋值给变量,或者在别的表达式里用。

比如,算两个数的最小值:

int a = 2;
int b = 3;
int min = a < b ?  a :  b;

或者根据条件给变量赋不同的值:


int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;
经典 if-else

用三元运算符写就是这样:


int age = 25;
int money = age > 30 ? 100 : 50;
三元运算符——更简洁的写法

到底用if-else还是三元运算符?速度上没啥区别,但三元运算符适合短条件。如果一行写不下,还是用if-else更清楚。

3. 使用小细节

值的类型
三元运算符的两边(<为真时的值><为假时的值>)类型要一样,或者能兼容(比如都是string或者都是int)。

这样没问题:

int a = 10, b = 20;
int max = (a > b) ? a : b; // 两边都是int

编译错误:

int a = 10, b = 20;
// string和int不兼容
string result = (a > b) ? "更大" : 0; // 编译错误

正确写法:

int a = 10, b = 20;
string result = (a > b) ? "更大" : "小于等于";

例子:处理数字

int number = -5;
int abs = (number >= 0) ? number : -number;
Console.WriteLine(abs); // 5

4. 把三元运算符用到应用里

来写个小对话程序:除了打招呼,程序还会告诉用户明年几岁了,并且说他是不是成年人。

Console.Write("请输入你的名字: ");
string name = Console.ReadLine();

Console.Write("请输入你的年龄: ");
string ageText = Console.ReadLine();
int age = int.Parse(ageText);

int nextYear = age + 1;
string status = (nextYear >= 18) ? "成年人" : "未成年人";

Console.WriteLine($"你好, {name}! 明年你就{nextYear}岁了。你将会是{status}。");

细节解释:

  • 变量status是用三元运算符算出来的:如果明年年龄不小于18,就是成年人(或者还是成年人)。
  • 三元运算符可以直接塞到字符串里(比如用$""插值)。

5. 嵌套三元运算符——小心用!

三元运算符可以嵌套(每个分支里还能再写一个三元)。但是……这样一般会让人头大,尤其是以后别人(或者你自己两天后)再看代码的时候。

例子:按年龄分组

string category = (age < 7) ? "学龄前" :
                  (age < 18) ? "学生" :
                  (age < 65) ? "成年人" : "退休";

决策表:

年龄 条件 结果
< 7 age < 7 学龄前
7–17 age < 18 学生
18–64 age < 65 成年人
65及以上 否则 退休

这种代码还能看,但要是逻辑再复杂点——最好用if-else if-else

6. 小技巧:三元运算符和bool类型

有时候会看到这样的代码:

bool adult = (age >= 18) ? true : false;

其实完全没必要。(age >= 18)本身就返回bool。所以直接写:

bool adult = (age >= 18);
2
任务
C# SELF, 第 3 级, 课程 5
已锁定
简单使用三元运算符
简单使用三元运算符
2
任务
C# SELF, 第 3 级, 课程 5
已锁定
年龄分类
年龄分类
1
调查/小测验
条件运算符第 3 级,课程 5
不可用
条件运算符
条件运算符
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION