【从零开始入门unity游戏开发之——C#篇06】变量类型转化和异常捕获

文章目录

一、变量类型转化

1、什么是类型转换

类型转换就是将一种数据类型转换成另一种数据类型。

2、隐式转化

隐式类型转换是指在某些情况下,编译器会自动将一种类型转换为另一种类型。通常,隐式转换发生在没有丢失信息的情况下,例如从 int 转换为 double,因为 double 可以表示更大范围的数值。

相同类型之间的转换

只能大范围装小范围

csharp 复制代码
long l = 1;
int i = 1;
l = i;//隐式转换

不能小范围装大范围

大小比

有符号:long > int > short > sbyte

有符号:ulong > uint > ushort > byte

3、显示转换

显式类型转换(又叫强制类型转换)需要程序员手动指定转换方式。显式转换通常在存在潜在丢失信息的情况下使用,比如将一个较大的类型(double)转换为较小的类型(int)。这种转换如果没有强制执行,编译器会报错。

3.1 括号强转

一般情况下是将高精度的类型强制转换为低精度

语法
csharp 复制代码
变量类型 变量名 = (变量类型)变量
示例

从 double 转换到 int(可能丢失数据)

csharp 复制代码
float f= 9.78f;
int intValue = (int)f;  // 强制转换,会丢失小数部分
Console.WriteLine(intValue);  // 输出 9
注意
  • 可能丢失精度数据,浮点转整数会直接抛弃后面的小数
  • 一定要注意范围,不然可能报错
  • bool和string是不能通过括号强转的

3.2 使用 Parse 和 TryParse 方法

有时我们需要将字符串转换为数值类型,Parse 和 TryParse 是非常有用的两种方法。

  • Parse:如果转换失败,会抛出异常。
  • TryParse:如果转换失败,不会抛出异常,返回 false,适合处理可能的转换错误。
语法
csharp 复制代码
变量类型.Parse("字符串");
变量类型.TryParse("字符串");
示例

使用 int.Parse()

csharp 复制代码
string numberString = "123";

int number = int.Parse(numberString);
Console.WriteLine(number);  // 输出 123

float f = float.Parse(numberString);
Console.WriteLine(f);  // 输出 123

使用 TryParse()

csharp 复制代码
string numberString = "abc";
//尝试转换,失败时不会抛出异常,成功返回True,失败返回false
//number就是转换后的变量,out 关键字先不用管,后面会再介绍
bool result = int.TryParse(numberString, out int number);  

3.3 使用 Convert 类进行转换

更准确的将各个类型之间进行相互转换,它会自动判断如何转换,避免了你手动进行转换操作。

语法
csharp 复制代码
Covert.To目标类型(变量或常量)
示例

其他类型转string类型

csharp 复制代码
string f = Convert.ToString(123);

如果是把字符串转对应类型那字符串一定要合法合规,Int32就是我们前面一直说的int类型

csharp 复制代码
int i = Convert.ToInt32("A");//会报错,因为A不是数字
int i2 = Convert.ToInt32("123");//正确
bool b = Convert.ToBoolean("true");//正确
bool f = Convert.ToBoolean("12.12");//正确

数值转换精度比括号强转会好点, Convert 会四舍五入

csharp 复制代码
float doubleValue = 9.78f;
int intValue = Convert.ToInt32(doubleValue);  
Console.WriteLine(intValue);  // 输出 10

把bool类型也可以转换成数值类型 true对应1 false对应0,反过来就不行

csharp 复制代码
int i1 = Convert.ToInt32(true);// 输出 1
int i2 = Convert.ToInt32(false);// 输出 0

3.4 .ToString()其他类型转string

更方便的转string类型方法

语法
csharp 复制代码
变量.ToString();
示例

其他类型转string类型

csharp 复制代码
string str = 123.ToString();
string str1 = true.ToString();
string str2 = 12.12f.ToString();

当我们进行字符串拼接时就自动会调用ToString转成string

csharp 复制代码
string str3 = 123 + "abc" + true;
Console.WriteLine(str3);

二、异常捕获

通过对异常捕获的学习,可以避免当代码报错时造成程序卡死的情况

1、基本语法结构

csharp 复制代码
try
{
    // 希望进行异常捕获的代码块
    // 这里放置可能会抛出异常的代码
}
catch (Exception e)  // 如果出现异常,捕获并处理
{
    // 通过 e 获取具体的错误信息
    Console.WriteLine("发生异常: " + e.Message);
    // 可以进一步处理异常,比如日志记录、通知等
}
//可选,非必须
finally
{
    // 最终执行的代码,是否发生异常都会执行
    Console.WriteLine("无论是否发生异常,这里的代码都会执行");
}

2、使用

比如前面说的转换代码

csharp 复制代码
int i = Convert.ToInt32("A");//会报错,因为A不是数字
Console.WriteLine(i);
Console.WriteLine("执行通过");

如果我们直接运行,肯定会报错,导致程序运行卡死,自然也打印不出执行通过

如果我们修改代码,加入异常捕获代码,如下

csharp 复制代码
try
{
    int i = Convert.ToInt32("A");//会报错,因为A不是数字
    Console.WriteLine(i);
}
catch (Exception e)
{
    Console.WriteLine("发生异常: " + e.Message);
}
finally
{
    // 最终执行的代码,是否发生异常都会执行
    Console.WriteLine("无论是否发生异常,这里的代码都会执行");
}

Console.WriteLine("执行成功");

结果,程序顺利执行

3、作用

通过使用异常捕获,你可以有效地处理程序中的错误,提供用户友好的错误信息,并保证程序的稳定性和可维护性。可以进一步处理异常,比如日志记录、通知等会很有用。


专栏推荐

地址
【从零开始入门unity游戏开发之------C#篇】
【从零开始入门unity游戏开发之------unity篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架开发】

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

相关推荐
独自破碎E13 分钟前
Java 面经之 Kafka
java·开发语言·kafka
麻瓜老宋23 分钟前
C语言之波兰表达式的交互运行
c语言·开发语言·数据结构·算法
强里秋千墙外道31 分钟前
【Qt】Qt+Visual Studio 2022环境开发
开发语言·qt·visual studio
浅陌sss43 分钟前
Unity性能优化---使用SpriteAtlas创建图集进行批次优化
游戏·unity·游戏引擎
向宇it44 分钟前
【从零开始入门unity游戏开发之——C#篇03】变量和常量
开发语言·vscode·unity·c#·游戏引擎
重生之我是数学王子1 小时前
ARM体系架构
linux·c语言·开发语言·arm开发·系统架构
飞的肖1 小时前
RabbitMQ 安装、配置和使用介绍 使用前端js直接调用方式
开发语言·javascript·ruby
孙鹏宇.1 小时前
C++打地鼠游戏一小时极限开发
c++·游戏
earthzhang20211 小时前
《深入浅出HTTPS》读书笔记(19):密钥
开发语言·网络协议·算法·https·1024程序员节
Cooloooo1 小时前
Treap树堆【东北大学oj数据结构8-4】C++
开发语言·数据结构·c++