C#,入门教程(23)——数据类型转换的一点基础知识

上一篇:

C#,入门教程(22)——函数的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124181689

先简单回顾一下,C#的数据类型大致有这样一些:
(1)原始类型:byte, bool, int, double, char, string...
(2)集合类型:List, Stack, Quene, Hashtable...
(3)自定类型:enum, struct, class...

本文仅仅局限于原始数据类型转换的问题。
这里要知道的是:byte, bool, int, double, char, string, List, Stack, Quene, Hashtable...等等,归根结底都是object class。

数据类型的转换是一门艺术,是编程的重要内容。
因而,要做好数据类型转换绝非易事。
包括但不限于下面的要求:
(1)可靠:数据不能丢,少、乱;
(2)速度:遭遇大量、超量的数据,类型转换算法的效率就成了整个系统的基础;
(3)可控:程序最不可避免的唯一的特性就是出错!几乎无法完成的任务只有稳定!如何把数据转换的错误控制在牢笼里,是很讲究的。

一、ToString()

所有数据的原始信息都是 byte。
所有数据类的最终体现都是字符串String(=string) 或者 图像Image。
这里要知道的是:byte,bool,int,double,char,string,List,Stack,Quene,Hashtable...等等都是class。
因而,所有数据类型都有其基本的 ToString() 方法。
自定义的数据类型(class)应该override。

int a = 10;
double b = 3.14;
string c = a.ToString() + b.ToString();
//c = "103.14"
//简约写法:
string c = a + " " + b;
// c = "10 3.14"

二、数据转换的部分典型实例

1、string vs char

string stringSource = "hello world!";
char[] charArray = stringSource.ToCharArray();

string stringResult = new string(charArray);

2、string vs byte

所有数据的原始信息都是 byte。
计算机的所有数据都是按字节 byte 保存的。
这导致,不同的文字编码,文字的存储数据长度可能不同。
比如:

你好!
保存这两个字与一个标点符号的文件,在 DOS 或 Windows 或 iOS 或 Unix 或 Linux 下可能不同。
即使都是 Windows,即使都是 Windows 11,如果保存的时候选择不同的编码,比如 ASCII,或 Unicode 或 UTF-8 ,

因而,string/int/double vs byte 的转换与编码密切相关。
有关编码的知识,很多很多,自己搜 "C# 字符编码"

string stringSource = "hello world!";
Encoding utf8 = System.Text.Encoding.UTF8;
byte[] byteArray = utf8.GetBytes(stringSource);

string stringResult = utf8.GetString(byteArray);

3、string vs int or double

关键是 String.Format 函数:

int a = 18;
double b = 3.14;
string sa = String.Format("{0:D4}", a);
//sa = "0018";
string sb = String.Format("{0:F8}", b);
//sb = "3.14000000";

更多使用方法,请搜 "C# String.Format"

string sa = "32";
int a = Int32.Parse(sa);

或:

string sb = "64";
if(Int32.TryParse(sb, out int a))
{
    ;
}

三、数据转换的禁忌

1、少用强制类型转换!Convert!

Convert简化的类型转换的编程,但深深埋下了炸弹级别的错误隐患!
实验室写代码,无所谓了!工业软件,绝不能用Convert !
但我也鼓励大家从学校开始,就养成良好的编程习惯。
 

2、数据转换之前,一定要做数据的检查。

典型的工业软件级别的数据转换程序写法:

string unknowString = "";

//...
//...

if(IsInteger(unknowString)) 
{
    int intValue = Int32.Parse(unknowString);
}
else 
{
    throw new Exception("ERROR invalid integer string " + unknowString);
}

很麻烦?
程序写的越麻烦,后面的使用与运行就越可靠!

下一篇:

https://blog.csdn.net/beijinghorn/article/details/124204317icon-default.png?t=N7T8http://C#%EF%BC%8C%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B(24)%E2%80%94%E2%80%94%E7%B1%BB%E7%B4%A2%E5%BC%95%E5%99%A8%EF%BC%88this%EF%BC%89%E7%9A%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/337230.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记——克里金插值

有一篇大神的文章写得非常的具体, https://xg1990.com/blog/archives/222 下面写下一些学习笔记: 1、关于克里金插值的基本原理 克里金插值来源于地理学,它的前提是地理学第一定律:所有事物都与其他事务相关,但是近…

Python爬蟲海外動態IP防止被封的方法 - okey proxy

在使用Python進行網路爬蟲過程中,我們常遇到一個問題,就是如何防止我們的爬蟲被目標網站封禁?其中一種有效的方法是使用海外動態IP代理。 代理伺服器就像是你和目標網站之間的中間人。而動態IP代理則意味著,每次連接都會使用一個…

Docker(四)操作容器

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! 操作 Docker 容器 容器是 Docker 又一核心概念。 简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境…

5G基站节能及数字化管理解决方案

截至2023年10月,我国5G基站总数达321.5万个,占全国通信基站总数的28.1%。然而,随着5G基站数量的快速增长,基站的能耗问题也逐渐日益凸显,基站的用电给运营商带来了巨大的电费开支压力,降低5G基站的能耗成为…

使 a === 1 a === 2 a === 3 为 true 的几种“下毒“方法

前言 这算得上是近些年的前端网红题了,曾经对这种网红题非常抵触,认为非常没有意义。 看到了不少人有做分享,有各种各样的方案,有涉及到 JS 非常基础的知识点,也不得不感叹解题者的脑洞之大。 但是,拿来…

redis远程连接不上解决办法

问题描述: redis远程服务端运行在192.168.3.90计算机上,客户端计算机(ip:192.168.3.110)通过redsi-cli.exe客户端工具连接时,没有反应,连接不上。 如图所示: 解决步骤: 步骤一&…

UE5 植物生长材质_树根像目标缠绕(记录备忘)

需要在三维软件中将树根缠绕物体的形态预先做好,将管状树根uv方形排布,模型默认材质为渐变上黑下白,导入引擎,注意制作树根尖端需要将左侧Masked数值由0.333修改为0

Java根据模板文件生成excel文件,同时将excel文件转换成图片

需求 需要将指定数据导出成表格样式的图片&#xff0c;如图 业务拆解 定义一个导出模板将得到的数据填入模板中&#xff0c;生成excel文件将ecxel文件转换成png格式的图片 代码实现 需要引入的依赖 <dependency><groupId>cn.hutool</groupId><artif…

6、梯度提升XGBoost(eXtreme Gradient Boosting)

XGBoost梯度提升 结构化数据最精确的建模技术。 在本节课中,我们将学习如何使用梯度增强来构建和优化模型。这种方法在Kaggle的许多竞争中占据主导地位,并在各种数据集上获得了最先进的结果。 本课程所需数据集夸克网盘下载链接:https://pan.quark.cn/s/9b4e9a1246b2 提取码…

JavaScript之ES6新特性02

模板字符串 模板字符串&#xff08;template string&#xff09;是增强版的字符串&#xff0c;用反引号&#xff08;&#xff09;标识。它可以当作普通字符串使用&#xff0c;也可以用来定义多行字符串&#xff0c;或者在字符串中嵌入变量 。 模版字符串特点 内容中可以直接…

【机器学习】调配师:咖啡的完美预测

有一天&#xff0c;小明带着一脸期待找到了你这位数据分析大师。他掏出手机&#xff0c;屏幕上展示着一份详尽的Excel表格。“看&#xff0c;这是我咖啡店过去一年的数据。”他滑动着屏幕&#xff0c;“每个月的销售量、广告投入&#xff0c;还有当月的气温&#xff0c;我都记录…

【C++提高编程(二)】

一、STL初识 1.1、STL的诞生 长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西 C的面向对象和泛型编程思想&#xff0c;目的就是复用性的提升 大多情况下&#xff0c;数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 为了建立数据结构和算法的一套标…

如何自学Python:一份详细的指南

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;有感而谈⛺️稳中求进&#xff0c;晒太阳 引言 Python是一种广泛使用的高级编程语言&#xff0c;以其简洁明了的语法和强大的功能而受到许多程序员的喜爱。无论是数据分析、网络开发&#…

【教程】React-Native代码规范与加固详解

引言 React Native 是一种跨平台的移动应用开发框架&#xff0c;由 Facebook 推出。它可以让我们使用 JavaScript 和 React 语法编写原生应用&#xff0c;大大提高了移动应用的开发效率。但是&#xff0c;对于开发人员来说&#xff0c;代码规范和安全性也是非常重要的问题。本…

C++ memmove 学习

memmove&#xff0c;将num字节的值从源指向的位置复制到目标指向的内存块。 允许目标和源有重叠。 当目标区域与源区域没有重叠则和memcpy函数功能相同。 宽字符版本是wmemmove&#xff0c;安全版本加_s&#xff1b; #include "stdafx.h" #include<iostream&g…

Eureka使用详解

介绍主要特点主要功能与常用服务注册中心的比较Eureka与Zookeeper的区别和联系Eureka与Nacos的区别与联系Eureka与Consul的区别与联系 安装部署Eureka与CAP理论Eureka实现实时上下线Eureka常用注解Eureka架构模式 介绍 Eureka是一个基于REST的服务&#xff0c;主要用于AWS云中…

rem布局

1.0 rem基础 1.1 em单位(了解) 结论1&#xff1a;1em默认字体大小是16像素 结论2: em这个单位会默认参考父元素字体大小为基准 <head><style>/* 结论1: 1em默认字体大小是16像素结论2: em这个单位会默认参考父元素字体大小为基准*//* html {如果根元素默认字体…

面试2024.1.20

简单介绍下你做的项目。 这个神领物流项目是一个前后端分离的项目&#xff0c;前段他有3个客户端&#xff08;用户端为微信小程序、司机端和快递员端为app&#xff09;一个管理端&#xff08;pc&#xff09;&#xff0c;后端用的技术栈用的是SpringAlibabaCloud、数据库用的是M…

ABC337 A-G

Toyota Programming Contest 2024#1&#xff08;AtCoder Beginner Contest 337&#xff09; - AtCoder 手速五题之后看FG&#xff0c;一看榜G过的比F多...两题都有思路然后先开写了F像是大模拟写了一堆bug&#xff0c;赛后对拍调bug调完疯狂re&#xff0c;发现是对数组双倍操作…

Django开发_14_后台管理及分页器

一、后台管理 &#xff08;一&#xff09;登录 http://127.0.0.1:8000/admin/ &#xff08;二&#xff09;创建超级用户 manage.py createsuperuser &#xff08;三&#xff09;注册模型 admin.py&#xff1a; models [model1&#xff0c;model2&#xff0c;model3 ]ad…