Unity之C#学习_c# unity
注释
分类:
1.两杠注释
2.星号注释
3.三杠注释 可用于给一些自定义的类型(如枚举)之前,可形成注释,便于理解
快捷键:
ctrl+K+C 注释
ctrl+K+U 取消注释
折叠代码
#region 如何折叠代码
//输入#region后点击Tab键会自动生成 #endregion
//本质是编辑器提供的预处理指令,在代码发布或执行都会被自动删除
#endregion
变量
变量 是存储 不同类型 数值 的 一个容器,不同的变量类型可以存储不同类型的值
变量类型 --关键字 --范围 --类型
如何声明变量
// 变量类型 变量名 = 数值;
int i = 1;
//14种变量类型 变量名自己定义但要按照规则 初始值和变量类型时统一的
//1.有符号的整形变量 --存储一定范围 正负数包括0的变量类型 //sbyte -128~127 sbyte sb = 1; Console.WriteLine(\"sbyte变量sb中存储的值是\" + sb); //用+号来拼接字符串和变量的打印 // int -21亿~21亿多 int a = 1; // short -32768~32768之间的整数 short s = 3; // long -9百万兆~9百万兆之间的数 long l = 4; //2.无符号的整形变量 --存储 一定范围的 0和正数的变量类型 // byte 0~255 byte b = 1; // uint 0~42亿多的一个范围 uint ui = 2; // ushort 0~65536之间的一个数 ushort us = 3; // ulong 0~18百万兆之间的数 ulong ul = 4; //3.浮点数 // float --存储7/8位有效数字,根据操作系统或者编译器不同 保留的有效数字可能不同,四舍五入 float f = 1.223442123f; //c#中声明的小数默认是double类型 所以float类型小数后加f或F float f1 = 30; // double --存储15~17位有效数字 四舍五入 有效数字指的是从左到右的非0数开始计算的 double d = 0.232423423435; // decimal --存储27~28位有效数字 一般不建议使用 decimal de = 0.1342351353462462465624235266m; //4.特殊类型 //bool 真假类型 --true false bool bo = true; bool bo2 = false; Console.WriteLine(bo +\"\"+ bo2); //char 字符类型 --存储单个字符的变量类型 char c = \'a\'; Console.WriteLine(c); //string 字符串类型 --存储多个字符 没有上限 string str = \"aaabbbccc\"; Console.WriteLine(str);
注意:c#中声明的小数默认是double类型 所以float类型小数后加f或F
为什么有这么多不同的变量类型
不同的变量存储的范围的类型不同,本质上是占用的内存空间不同
整数用int 小数用float 字符串用string 真假用bool
变量的存储空间
变量的存储空间 //1byte = 8bit //1KB = 1024byte //1MB = 1024KB //1GB = 1024MB //1TB = 1024GB //通过sizeof方法 可以获取变量类型所占的内存空间(单位:字节) //有符号 //sbyte (-128~127) //int (-21亿多~21亿多) //short (-3万多~3万多) //long (-9百万兆多~9百万兆多) int sbyteSize = sizeof(sbyte); Console.WriteLine(\"sbyte 所占的字节数位\" + sbyteSize); //sbyte 所占的字节数位1 int intSize = sizeof(int); Console.WriteLine(\"int 所占的字节数位\" + intSize); //int 所占的字节数位4 int shortSize = sizeof(short); Console.WriteLine(\"short 所占的字节数位\" + shortSize); //short 所占的字节数位2 int longSize = sizeof(long); Console.WriteLine(\"long 所占的字节数位\" + longSize); //long 所占的字节数位8 Console.WriteLine(\"*******************************************\"); //无符号 //byte (0~255) //uint (0~21亿多) //ushort (0~6万多) //ulong (0~18百万兆多) int byteSize = sizeof(byte); Console.WriteLine(\"byte 所占的字节数位\" + byteSize); int uintSize = sizeof(uint); Console.WriteLine(\"uint 所占的字节数位\" + uintSize); int ushortSize = sizeof(ushort); Console.WriteLine(\"ushort 所占的字节数位\" + ushortSize); int ulongSize = sizeof(ulong); Console.WriteLine(\"ulong 所占的字节数位\" + ulongSize); Console.WriteLine(\"*******************************************\"); //浮点数 //float (7~8位有效数字) //double (15~17位有效数字) //decimal (27~28位有效数字) int floatSize = sizeof(float); Console.WriteLine(\"float 所占的字节数位\" + floatSize); //float 所占的字节数位4 int doubleSize = sizeof(double); Console.WriteLine(\"double 所占的字节数位\" + doubleSize); //double 所占的字节数位8 int decimalSize = sizeof(decimal); Console.WriteLine(\"decimal 所占的字节数位\" + decimalSize); //decimal 所占的字节数位16 Console.WriteLine(\"*******************************************\"); //特殊类 //bool (true和false) //char (一个字符) //string (一串字符) int boolSize = sizeof(bool); Console.WriteLine(\"bool 所占的字节数位\" + boolSize); //bool 所占的字节数位1 int charSize = sizeof(char); Console.WriteLine(\"char 所占的字节数位\" + charSize); //char 所占的字节数位2 //string不能用sizeof来看所占内存大小 因为字符串长度是可变的 Console.WriteLine(\"*******************************************\");
变量命名规则
//驼峰命名法==首字母小写,之后单词首字母大写(变量) string myName = \"zzx\"; string yourName = \"aaa\"; //帕斯卡命名法--所有单词首字母都大写(函数,类) string MyName = \"man\"; //c#中大小写是敏感的 区分的
变量命名必须遵守的规则
//1.不能重名
//2.不能以数字开头
//3.不能使用程序关键字命名(蓝色字体)
//4.不能有特殊符号 下划线除外(空格也是特殊符号不能用)
//建议使用有含义的--英文(拼音)来表示变量
常量
关键字 const
//固定写法 // const 变量类型 变量名 = 初始值; const int i = 20;
常量的特点
//1.必须初始化 //2.不能被修改 const int a; int b; const string myName = \"zzx\"; myName = \"aaa\";*/ //作用:声明一些常用不变的变量 //PI const float PI = 3.1415926f;
转义字符
转义字符是字符串的一部分,用来表示一些特殊含义的字符
//常用的转义字符 //单引号 \\\' Console.WriteLine(\"\\\'hahaha\"); //双引号 \\\" Console.WriteLine(\"\\\"123\\\"\"); //换行 \\n Console.WriteLine(\"123\\n123\"); //斜杠 \\\\ Console.WriteLine(\"123\\\\\"); //不常用的转义字符 //制表符 \\t(四个空格) Console.WriteLine(\"123\\t123\"); //光标退格 \\b Console.WriteLine(\"123\\b123\"); //空字符 \\0 Console.WriteLine(\"123\\0123\"); //警报音 \\a Console.WriteLine(\"\\a\"); #endregion #region 取消转义字符 前加@ Console.WriteLine(@\"\\n\\\\\");
类型转换
类型转换 不同变量类型之间的转换
隐式转换
基本规则
隐式转换的基本规则 --自动转换
大范围转小范围
double -->float -->所有整形(有符号、无符号)
decimal -->所有整形(有符号、无符号)
无符号 不能 隐式存储 有符号
有符号 可以 隐式存储 无符号(范围小的)
有符号 long > int > short > sbyte
无符号 ulong > uint > ushort > byte
高精度(大范围)装低精度(小范围)
double -->float -->整数(无符号、有符号)-->char
decimal -->整数(无符号、有符号)-->char
string、bool不和其他类型进行隐式转换
相同大类型之间的转换
有符号 long > int > short > sbyte(不能用小范围的去装大范围的类型)
无符号 ulong > uint > ushort > byte
浮点数 decimal double float(decimal这个类型没有办法用隐式转换的形式去存储double和float)
特殊类型 bool char string(各自为阵 没关系 不存在隐式转换 )
//有符号 long > int > short > sbyte long l = 1; int i = 1; short s = 1; sbyte sb = 1; l = i; //int隐式转换成了long //不能用小范围的去装大范围的类型 i = l; //无符号 ulong > uint > ushort > byte ulong ul = 1; uint ui = 1; ushort us = 1; byte b = 1; ul = ui; us = b; //浮点数 decimal double float decimal de = 1.1m; double d = 1.1; float f = 1.1f; //decimal这个类型没有办法用隐式转换的形式去存储double和float //de = d; d = f; //特殊类型 bool char string //各自为阵 没关系 不存在隐式转换 bool bo = true; char c = \'a\'; string str = \"asd\";
不同大类型之间的转换
无符号和有符号之间
无符号 (装不下存在负数的有符号数)
有符号装无符号 //有符号变量是可以装无符号变量的,前提是范围是要涵盖的 存在隐式转换
//无符号 (装不下存在负数的有符号数) byte b2 = 1; ushort us2 = 1; uint ui2 = 1; ulong ul2 = 1; //有符号 sbyte sb2 = 1; short s2 = 1; int i2 = 1; long l2 = 1; //无符号装有符号 --有符号的变量 不能 隐式转换为 无符号的 //b2 = sb2; //us2 = s2; // ul2 = sb2; //有符号装无符号 //有符号变量是可以装无符号变量的,前提是范围是要涵盖的 存在隐式转换 //i2 = ui2; // int -21亿~21亿多 // uint 0~42亿多的一个范围 i2 = b2;
浮点数和整数(有、无符号)之间
浮点数可以装载任何类型的整数 (大范围装小范围)
虽然decimal不能够隐式存储double、float 但可以隐式存储整形
double -->float -->所有整形(有符号、无符号)
decimal -->所有整形(有符号、无符号)
整数装浮点数 整数不能隐式存储浮点数
//整数装浮点数 float f2 = 1.1f; double d2 = 1.1; decimal de2 = 1.1m; //浮点数可以装载任何类型的整数 (大范围装小范围) //虽然decimal不能够隐式存储double、float 但可以隐式存储整形 //double -->float -->所有整形(有符号、无符号) // decimal -->所有整形(有符号、无符号) f2 = l2; f2 = i2; f2 = s2; f2 = sb2; f2 = ui2; f2 = us2; f2 = b2; f2 = ul2; f2 = 10000000000000000000; //1E+19 科学计数法 Console.WriteLine(f2); de2 = l2; de = ul2; //整数装浮点数 整数不能隐式存储浮点数 //i2 = f2;
特殊类型和其他类型之间的转换
bool不能和其他类型相互隐式转换
char char没有办法隐式存储其他类型
char类型可以隐式转换为整形和浮点型
转换成数值类型时 对应的数字其实是ASCII码(美国信息交换标准代码)
string 类型不能和其他类型进行隐式转换
//bool bool不能和其他类型相互隐式转换 bool bo2 = true; char c2 = \'a\'; string str2 = \"abc\";/* bo2 = c2; bo2 = str2; c2 = bo2; str2 = bo2; bo2 = i2; bo2 = ui2; bo2 = f2; ui2 = bo2; f2 = bo2*/ //char char没有办法隐式存储其他类型 //char类型可以隐式转换为整形和浮点型 //转换成数值类型时 对应的数字其实是ASCII码(美国信息交换标准代码)/* c2 = ui2; c2 = i2; c2 = ul2; c2 = str2; c2 = f2;*/ i2 = c2; Console.WriteLine(i2); //97 ‘a’的ASCII码 f2 = c2; Console.WriteLine(f2); ui2 = c2; Console.WriteLine(ui2); //str2 = c2; //string 类型不能和其他类型进行隐式转换 /* i2 = str2; ui2 = str2; str2 = i2; */ char name1 = \'赵\'; char name2 = \'x\'; i2 = name2; Console.WriteLine(i2); i2 = name1; Console.WriteLine(i2);
显式转换
显示转换即手动处理、强制转换。
括号强转
括号强转(数值之间)
一般情况下 将高精度的类型强制转换为低精度
语法: 变量类型 变量名 = (变量类型) 变量; ()中为想要强转成什么类型
注意: 精度问题(丢失) 范围问题(异常)
//相同大类的整形之间 //有符号整形 sbyte ab = 1; short s = 1; int i = 40000; long l = 1; //括号强转可能会出现的问题 造成的异常 超出范围 s = (short)i; //int强制转换成short Console.WriteLine(s); //无符号整形 byte b = 1; uint ui = 1; b = (byte)ui; //浮点之间 float f = 1.1f; double d = 1.1234567890123456789f; f = (float)d; Console.WriteLine(f);//可能会导致精度损失 //无符号和有符号 uint ui2 = 1; int i2 = -1; //在强转的时候一定要注意范围,不然得到的结果 可能有异常 ui2 = (uint)i2; Console.WriteLine(ui2); i2 = (int)ui2; //浮点和整形 浮点数强转成整数时,会直接抛弃掉小数点后面的小数,不会四舍五入 i2 = (int)1.24f; Console.WriteLine(i2); //char和数值类型 i2 = \'A\'; char c = (char)i2; Console.WriteLine(c); //bool和string 不能够通过括号强转 bool bo = true; //int i3 = (int)bo; string str3 = \"1233\"; //i3 = (int)str3;
Parse法
Parse法(字符串转数值)
把字符串类型转换成对应类型
语法: 变量类型.Parse(“字符串”)
注意: 字符串必须能够转换成对应类型 否则报错
//有符号 int i4 = int.Parse(\"123\"); Console.WriteLine(i4); //i4 = int.Parse(\"123.45\"); //Console.WriteLine(i4); //short s3 = short.Parse(\"40000\"); 填写的字符串 1.必须时能够转换成对应类型 2.必须是在对应类型范围之内 否则报错 //Console.WriteLine(s3); Console.WriteLine(sbyte.Parse(\"1\")); Console.WriteLine(long.Parse(\"123123\")); //无符号 Console.WriteLine(ulong.Parse(\"123123\")); Console.WriteLine(byte.Parse(\"1\")); Console.WriteLine(uint.Parse(\"1\")); //浮点数 float f3 = float.Parse(\"1.123\"); double d3 = double.Parse(\"1.123\"); //特殊类型 bool b5 = bool.Parse(\"true\"); Console.WriteLine(b5); char c2 = char.Parse(\"A\"); Console.WriteLine(c2);
Convert法
Convert法(精度更高的各种类型之间转换)
更准确的 各个类型之间进行相互转换
语法: Convert.To目标类型(变量或常量)
注意: 填写的变量或常量必须正确 否则报错
//转字符串 字符串同样要合法合规 int a = Convert.ToInt32(\"12\"); Console.WriteLine(a); Console.WriteLine(Convert.ToInt32(1.7345f));//会四舍五入 精度比括号强转更好 Console.WriteLine(Convert.ToInt32(true)); Console.WriteLine(Convert.ToInt32(false)); Console.WriteLine(Convert.ToInt32(\'A\')); Console.WriteLine(Convert.ToBoolean(1)); //true Console.WriteLine(Convert.ToBoolean(0)); //false Console.WriteLine(Convert.ToBoolean(-1));//true //精度更准确 //每一个类型都存在对应的 Convert中的方法 sbyte sb5 = Convert.ToSByte(\"1\"); short s5 = Convert.ToInt16(\"1\"); int i5 = Convert.ToInt32(\"1\"); long l5 = Convert.ToInt64(\"1\"); byte b6 = Convert.ToByte(\"1\"); ushort us5 = Convert.ToUInt16(\"1\"); uint ui5 = Convert.ToUInt32(\"1\"); ulong ul5 = Convert.ToUInt64(\"1\"); float f5 = Convert.ToSingle(\"13.2\"); double d5 = Convert.ToDouble(\"13.2\"); decimal de5 = Convert.ToDecimal(\"13.2\"); bool bo5 = Convert.ToBoolean(0); Console.WriteLine(bo5); char c5 = Convert.ToChar(\"a\"); string str5 = Convert.ToString(123445);
ToString法
ToString():其他类型转string、拼接打印
语法:变量.toString();
string str6 = 1.ToString(); str6 = true.ToString(); str6 = \'A\'.ToString(); str6 = 1.2f.ToString(); bool bo6 = true; str6 = bo6.ToString(); //当我们进行字符串拼接时,就会自动调用 tostring 转成 string Console.WriteLine(\"123\" + 1 + true); #endregion Console.WriteLine(Convert.ToChar(24069)) ; Console.WriteLine(int.Parse(\"123\")); string str10 = Console.ReadLine(); Console.WriteLine(int.Parse(str10));
异常捕获
作用
//string str = Console.ReadLine();
//int i = int.Parse(str);
捕获代码可能出现的问题(以上为用户可能输入的不是字符串) 避免程序卡死
#region 语法 //必备部分 try { //希望进行异常捕获的代码块 //如果try中的代码 报错了 不会让程序卡死 } catch { //如果出错了 会执行 catch中的代码来捕获异常 //catch(Exception e) 具体报错跟踪 通过e得到 具体的错误信息 } //可选部分 finally { //不管有没有出错 最后都会执行其中的代码 //可写可不写 } #endregion
举例
#region 举例 try { string str = Console.ReadLine(); int i = int.Parse(str); Console.WriteLine(i); } catch { Console.WriteLine(\"输入合法数字\"); } finally { Console.WriteLine(\"执行完毕\"); } #endregion try { Console.WriteLine(\"请输入语文成绩\"); string yuwen = Console.ReadLine(); Console.WriteLine(int.Parse(yuwen)); } catch { Console.WriteLine(\"输入错误\"); }
算术运算符
优先级
1.先算乘除取余 后算加减
int a = 1 + 4 % 2 * 3 / 2 + 1;
Console.WriteLine(a);
2.括号可以改变优先级 先计算括号里面内容
a = 1 + 4 % (2 * 3 / 2) + 1;
3./多组括号 先算最里层符号 依次往外算
a = 1 + 4 % (2 * (3 / 2)) +1;
自增减
//自增运算符
int a2 = 1;
a2++; //先用再加
++a2; //先加再用 (变量在前就先用变量,加号在前就先加(自增))
a2 = 1;
Console.WriteLine(a2++);//1
//2
Console.WriteLine(++a2);//3
//自减运算符
a2--;
--a2;
字符串拼接
用+号(+=)拼接 是唯一方法
#region 知识点一:字符串拼接方式1 //算数运算符 数值类型变量 进行运算 //string不存在算术运算符计算 但是可以通过+号来进行拼接 string str = \"123\"; str = str + \"456\"; Console.WriteLine(str); //123456 str = str + 1; //默认调用1.toString转换成字符串来进行拼接 Console.WriteLine(str); //1234561 // += str += \"456\" + 4 + true; Console.WriteLine(str); //12345614564True //先计算等号右边 str += 1 + 2 + 3 + 4; Console.WriteLine(str); //12345614564True10 //第一个是字符串拼接,后面默认加上Tostring str += \"\"+ 1 + 2 + 3 + 4; Console.WriteLine(str); //12345614564True101234 str = \"\"; str += 1 + 2 + \"\" + 3 + 4; Console.WriteLine(str); //334 str = \"123\"; str = str + 1 + 2 + 3; Console.WriteLine(str); //123123 #endregion #region 知识点二:字符串拼接方式2 //string.Format(\"待拼接的内容\",内容1,内容2); //拼接内容中的固定规则 //想要被拼接的内容用占位符替代{数字} 数字:0——n 依次往后 string str2 = string.Format(\"我是{0},我今年{1}岁,我想要{2}\", \"zzx\", 18, \"好好学习\"); Console.WriteLine(str2); //我是zzx,我今年18岁,我想要好好学习 int a = 1; str2 = string.Format(\"{0}{1}{2}{3}\", 1, a, false,str); Console.WriteLine(str2); //11False123123 #endregion #region 控制台打印拼接 //同Format 后面填的内容能多填不能少填 //占位符数字必须从0开始 必须按照顺序 Console.WriteLine(\"我是{0},我今年{1}岁,我想要{2}\", \"zzx\", 18, \"好好学习\"); //我是zzx,我今年18岁,我想要好好学习 Console.Write(\"我是{0},我今年{1}岁,我想要{2}\", \"zzx\", 18, \"好好学习\");
条件运算符
数值类型可以相互比较。特殊类型只能同类型进行比较。其中因为char可以隐式转换为其他数值类型 可以和数值类型进行比较。char 也可以和字符类型进行大小比较 (ASCII码)
a>b 纯比较不用结果 没有意义 会报错
比较的结果 返回一个bool值(true 、false)
不能进行范围比较
int a = 5; //判断是否在某两个值之间 //在主流语言中基本不能这样写 //result = 1 < a < 6; 会报错 //要判断 范围 逻辑运算符
各种应用写法
//变量和变量比较 a = 5; b = 10; result = a < b; //true //变量和数值(常量)比较 result = a 5; //true //数值和数值比较 result = 5 > 3; //true result = 5 == 3; //true result = 5 != 3; //true //计算结果比较 先算算数运算符 再算条件运算符 result = a + 3 > a - 2 + 3; //true result = 3 + 3 < 5 - 1; //false
只要是数值 就能够比大小 进行条件运算符比较。
特殊类型 char string bool 只能同类型进行 == 和 != 比较 。
其中因为char可以隐式转换为其他数值类型 可以和数值类型进行比较。
char 也可以和字符类型进行大小比较。
逻辑运算符
逻辑与 && 有假则假 同真为真 (同时满足)
逻辑或 || 有真则真 同假为假 (只要有一个)
逻辑非 ! 对一个bool值进行取反
// && //有假则假 同真为真 bool result = true && false; Console.WriteLine(result); result = true && true; Console.WriteLine(result); //bool相关的类型 bool变量 条件运算符 result = 3 > 1 && 1 1 && i 1 && i2 1 && i 2); Console.WriteLine(result); //逻辑非的优先级较高 int a = 5; result = !(a > 5);
混合使用优先级问题
逻辑非最高 &&高于||
|| < && < 条件运算符 < !(逻辑非)
bool gameOver = false; int hp = 100; bool isDead = false; bool isMustOver = true; result = gameOver || hp < 0 && !isDead || isMustOver; //false || false && true ||true //false || false ||true //true Console.WriteLine(result);//true
逻辑运算符短路问题
int i3 = 1; //有真则真 //逻辑与 有假则假 左边满足了条件 //右边的结果不重要 就不会再运算了 result = i3 > 0 || ++i3 >= 1; Console.WriteLine(i3); //1 Console.WriteLine(result); //true result = i3 = 1; Console.WriteLine(i3); //1
位运算符
用数值类型进行计算,将数值转换为2进制 再进行位运算
位与 &:规则 连接两个数值进行位计算 将数值转为二进制,对位运算 有0则0 双1为1
位或 | :规则 连接两个数值进行位计算 将数值转为二进制,对位运算 有1则1 双0为0
异或 ^ :规则 连接两个数值进行位计算 将数值转为二进制,对位运算 相同为0 不同为1
位取反~ :规则 写在数值前面 将数值转为二进制,对位运算 0变1 1变0
左移 <>:
规则 让一个数的二进制数 进行左移或右移,左移几位 右侧加几个0,右移几位 左侧去掉几个数
#region 知识点一 位与 & //规则 连接两个数值进行位计算 将数值转为二进制 // 对位运算 有0则0 int a = 1; //001 int b = 5; //101 //001 int c = a & b; Console.WriteLine(c); a = 3; //00011 b = 19; //10011 //00011 c = a & b;//3 Console.WriteLine(c); //多个数值进行位运算 没有括号时 从左往右计算 a = 1; b = 5; c = 9; int d = a & b & c; Console.WriteLine(d); #endregion #region 知识点二 位或 | //规则 连接两个数值进行位计算 将数值转为二进制 // 对位运算 有1则1 a = 1; b = 3; c = a & b; Console.WriteLine(c); //3 #endregion #region 知识点三 异或 ^ // 规则 连接两个数值进行位计算 将数值转为二进制 // 对位运算 相同为0 不同为1 a = 1; //001 b = 5; //101 //100 Console.WriteLine(a ^ b); a = 10;//1010 b = 11;//1011 //0001 c = 4; //0100 //0101 Console.WriteLine(a ^ b ^ c); #endregion #region 知识点四 位取反 // 规则 写在数值前面 将数值转为二进制 // 对位运算 0变1 1变0 a = 5;//0101 // 0 000 0000 0000 0000 0000 0000 0000 0101 (int)正数 // 1 111 1111 1111 1111 1111 1111 1111 1010 负数(反码补码) Console.WriteLine(~a); #endregion #region 知识点五 左移 <> // 规则 让一个数的二进制数 进行左移或右移 // 左移几位 右侧加几个0 a = 5; //101 c = a <> 2; // 10 // 1 Console.WriteLine(c); #endregion //35 << 4 //1000110000 //16+32+512 //1000010 //100001
三目运算符
基本语法
套路 : 3个空位 2个符号
固定语法 空位 ? 空位 : 空位
关键信息 bool类型 ? bool类型为真返回内容 : 为假返回内容
三目运算符 会有返回值 这个返回值类型必须一致 并且必须使用
#region 知识点二 具体使用 string str = false ? \"条件为真\" : \"条件为假\"; Console.WriteLine(str); int a = 5; str = a > 1 ? \"a满足条件\" : \"a不满足条件\"; Console.WriteLine(str);
第一个空位始终结果为bool类型( bool类型 条件表达式 逻辑运算符表达式)
第二、三个空位 什么表达式都可以 要保证结果类型一致