【从零开始入门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

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

相关推荐
xiaolang_8616_wjl11 分钟前
c++超级细致的基本框架
开发语言·数据结构·c++·算法
星辰落满衣19 分钟前
股票实时交易数据之Python、Java等多种主流语言实例代码演示通过股票数据接口
java·开发语言·python
毕设源码-钟学长1 小时前
【开题答辩全过程】以 基于java的点餐猫在线个性化点餐系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
wanhengidc1 小时前
巨椰 云手机 云游戏稳定运行
运维·服务器·arm开发·游戏·云计算
淼淼7631 小时前
Qt调度 程序
开发语言·c++·windows·qt
智算菩萨1 小时前
【实战】使用讯飞星火API和Python构建一套文本摘要UI程序
开发语言·python·ui
A24207349301 小时前
JavaScript图表制作:从入门到精通
开发语言·javascript·信息可视化
BD_Marathon1 小时前
Vue3_简介和快速体验
开发语言·javascript·ecmascript
时光追逐者1 小时前
一个基于 .NET 开源、功能强大的分布式微服务开发框架
分布式·微服务·开源·c#·.net·.net core
Poetinthedusk1 小时前
设计模式-命令模式
windows·设计模式·c#·wpf·命令模式