当前位置: 首页 > news >正文

C# 中的隐式和显式类型转换

当你需要转换值的类型时,可以使用类型转换。只有当你要转换的两种类型兼容时,才有可能。

当你收到错误“无法隐式将一种类型转换为另一种类型”时,说明你转换的两种类型不兼容。

int integer; // 声明一个名为 integer 的整型变量
integer = "Hello World"; // 尝试将字符串赋值给整型变量

此代码将导致上述错误。

两种类型转换

  • 隐式类型转换
  • 显式类型转换

隐式类型转换

隐式转换由编译器自动完成。

public static void Main(string[] args)
{int intToDouble = 10;double doubleFromInt;doubleFromInt = intToDouble;Console.WriteLine(doubleFromInt);
}

这会将 int 类型转换为 double 类型,而不会丢失数据,因为它是从较小的类型到较大的类型。

输出

显式类型转换

当将较大的类型转换为较小的类型时,我们必须使用显式类型转换,否则会出现错误。

public static void Main(string[] args)
{double doubleToInt = 11.1;int intFromDouble;intFromDouble = (int)doubleToInt;Console.WriteLine(intFromDouble);
}

这将导致数据丢失。double 的起始值是 11.1,但当它转换为较小的数据类型时,它将输出 11。

输出

当我们将较大的数据类型转换为较小的数据类型时,是否总会丢失部分数据?

答案是“不”!当较大的数据类型包含足够小的数字,而我们可以将其转换为较小的数据类型时,即使转换后,它仍将保留完整的数据

例如

public static void Main(string[] args)
{int intToByte = 100;byte byteFromInt = (byte)intToByte;Console.WriteLine(byteFromInt);
}

这将打印出 100 而不会丢失值

输出

但是如果超过 255 byteFromInt 只能容纳 intToByte - 255,因为 Byte 最多可以容纳 255

public static void Main(string[] args)
{int intToByte = 511;byte byteFromInt = (byte)intToByte;Console.WriteLine(byteFromInt);
}

这将打印出 255,为什么不是 256?因为字节数从 0 开始,它将执行 0-255

输出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过 Parse() 方法进行类型转换

在 C# 中我们有一个名为 Parse() 的内置方法,该方法执行不兼容的类型转换,例如数字类型和字符串之间的转换。

public static void Main(string[] args)
{string stringToInt = "100";int number = int.Parse(stringToInt);Console.WriteLine(stringToInt.GetType());Console.WriteLine(number.GetType());
}

输出

另一种方法是 Convert.ToString(intvalue);

public static void Main(string[] args)
{int intToString = 100;string stringFromInt = Convert.ToString(intToString);Console.WriteLine(intToString.GetType());Console.WriteLine(stringFromInt.GetType());Console.WriteLine(stringFromInt);
}

输出

但是当涉及到字到数字的类型转换时,例如 int 会导致运行时错误。

相关文章:

  • 华为HCIP Datacom H12-821 卷9
  • django学习入门系列之第三点《CSS基础样式介绍2》
  • select实现超时保护机制
  • 【性能优化】表分桶实践最佳案例
  • odoo17 小变更3 Warning、 “attrs “和 “states “不再用
  • 树和二叉树的定义
  • HBase面试题
  • 端到端的自动驾驶--论坛分析
  • Linux操作系统篇:多线程
  • 【Effective Modern C++】第1章 型别推导
  • 【React篇】父组件渲染时避免重复渲染子组件的3种处理方法
  • [C++][数据结构][跳表]详细讲解
  • SpringCloud微服务框架的原理及应用详解(二)
  • 完胜PSP的神器
  • 人工智能对决:ChatGLM与ChatGPT,探索发展历程
  • 【5+】跨webview多页面 触发事件(二)
  • Akka系列(七):Actor持久化之Akka persistence
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Java到底能干嘛?
  • Java知识点总结(JavaIO-打印流)
  • jquery ajax学习笔记
  • JSDuck 与 AngularJS 融合技巧
  • JS函数式编程 数组部分风格 ES6版
  • js学习笔记
  • Laravel 菜鸟晋级之路
  • windows下使用nginx调试简介
  • 安卓应用性能调试和优化经验分享
  • 不上全站https的网站你们就等着被恶心死吧
  • 大主子表关联的性能优化方法
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 七牛云假注销小指南
  • 深入浅出Node.js
  • 微信小程序开发问题汇总
  • 线上 python http server profile 实践
  • 正则表达式-基础知识Review
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​如何防止网络攻击?
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #每天一道面试题# 什么是MySQL的回表查询
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #数据结构 笔记一
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (52)只出现一次的数字III
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (ZT)薛涌:谈贫说富
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (分布式缓存)Redis分片集群
  • (回溯) LeetCode 40. 组合总和II
  • (剑指Offer)面试题34:丑数
  • (区间dp) (经典例题) 石子合并
  • (十七)Flink 容错机制