CodeGym /课程 /C# SELF /数据类型之间的转换

数据类型之间的转换

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

1. 为什么要进行类型转换?

C# 是个强类型语言。如果电脑有个“盒子”是专门装数字的,你硬要往里塞文本,这就像把叉子插进USB口一样。编译器绝对不会放过你!😡

不过,现实中我们经常要同时处理不同的数据类型。比如,你有个字符串,里面其实是个数字。这时候就需要类型转换(或者说类型变换)了。

来看个例子。假设你想存储用户数量:

int a = 1;
int b = "2";
int c = "三";

编译器立马就会说:“你把我当啥了?我可不会自动把字符串变成数字,得你自己来。你得手动把字符串转成数字。”

在C#里有好几种转换方式,每种都有自己的优缺点和常见坑点。

2. 把 int 转成 string

工作中经常需要把数字变成字符串:比如要显示在屏幕上、保存到文件、通过网络传输、跟文本拼接等等。C#里有好几种方法,不同场景下各有优势。

ToString() 方法

这是最基本、最常用的方式:

int number = 42;
string str = number.ToString();  // str == "42"

ToString() 会把数字按默认格式转成字符串。

字符串插值 ($"...")

现代写法,拼接变量很方便:

int number = 42;
string str = $"数字: {number}";

字符串插值会自动对插入的值调用 ToString()。

你可以组合多个变量,甚至指定格式:

int number = 42;
string str = $"{number:D5}"; // "00042" —— 五位数字,前面补零

和空字符串拼接

老方法,但也挺好用:

int number = 42;
string str = number + "";

这种写法简单场景下很快,但对看代码的人来说不太直观。

3. 隐式转换为字符串

前面说过,C#的开发者让所有变量、对象、表达式都能转成string类型。

而且,只要你把string类型和别的类型拼接,这个转换就会自动发生。比如:

int a = 5;
string name = "安雅" + a;            //  name 里是字符串 安雅5

int a = 5;
string city = a + "New York" + a;   //  city 里是字符串 5New York5

int number = 10;
string code = "Yo";
string message = "Hello! " + number + code; //  message 里是字符串 Hello! 10Yo

这三个例子里,我们随便把 int 和 string 拼在一起,结果总是 string 类型。

注意! 不能对 string 类型做算术运算。哪怕字符串全是数字也不行。

举几个例子:

int a = 5;
string name = "1" + a;              //  name 里是字符串 15

int a = 5;
string city = a + "9" + a;          //  city 里是字符串 595

int number = 10;
string code = "10";
string message = "" + number + code; // message 里是字符串 1010 

加法操作是从左往右算的,所以结果有时候会让你意外。比如:

int a = 5;
string name = a + a + "1" + a;      // name 里是字符串 1015

执行顺序是: ((a + a) + "1") + a

4. 字符串转数字

在C#里,要把数字转成字符串,只要和空字符串拼一下就行了:

string str = "" + 数字;

那如果要把字符串转成数字呢?其实不是所有字符串都能转成数字。只有字符串全是数字的时候才行。为此,int 类型有个专门的方法 Parse()。

用法长这样:


int x = int.Parse("字符串")
字符串转数字

这里 int x 是声明一个整型变量 x,字符串 是一个数字字符串(只包含数字的字符串)。

举几个例子:

string str = "123";
int number1 = int.Parse(str);        //  number1 里是数字 123;

int number2 = int.Parse("321");      //  number2 里是数字 321

int number3 = int.Parse("321" + 0);  //  number3 里是数字 3210

int number4 = "321"; //  无法编译: 变量是int类型,值却是string类型

负数也可以这样转:int.Parse() 方法很智能。

2
任务
C# SELF, 第 2 级, 课程 3
已锁定
数字转字符串
数字转字符串
2
任务
C# SELF, 第 2 级, 课程 3
已锁定
字符串转数字
字符串转数字
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION