做网站建设工资多少,电子政务 和网站建设总结,wordpress 模板修改,上海城市建设档案馆网站文章目录前言类型转换的概念1#xff0c;隐式转换2#xff0c;显式转换3#xff0c;程序类转换结语前言 #x1f33b; 大家好啊#xff0c;我是writer桑#xff0c;本章是关于 C# 数据类型转换的一个总结#xff0c;其中包含隐式、显示转换和程序类转换#xff0c;方便…
文章目录前言类型转换的概念1隐式转换2显式转换3程序类转换结语前言 大家好啊我是writer桑本章是关于 C# 数据类型转换的一个总结其中包含隐式、显示转换和程序类转换方便自己学习查阅的同时分享出来感谢支持。 类型转换的概念 C# 作为一种静态类型的编程语言变量在声明之后就无法再次声明。 或者无法分配另一种类型的值除非该类型可以进行隐式转换为变量的类型。 比方说 string 类型无法隐式转换为 int。但有时确实需要将值复制到其他类型的变量或方法参数中例如把 int 类型的变量转换为 double 类型。这些类型转换的操作就成为类型转换。 下表展示 C# 中可以执行的几种类型转换操作
转换操作描述隐式转换由于这种转换始终会成功且不会导致数据丢失因此无需使用任何特殊语法。 示例包括从较小整数类型到较大整数类型的转换以及从派生类到基类的转换。显式转换强制转换必须使用强制转换表达式才能执行显式转换。 在转换中可能丢失信息时或在出于其他原因转换可能不成功时必须进行强制转换。 典型的示例包括从数值到精度较低或范围较小的类型的转换和从基类实例到派生类的转换。程序类转换若要在非兼容类型如整数和 System.DateTime 对象或十六进制字符串和字节数组之间转换可使用 System.BitConverter 类、System.Convert 类和内置数值类型的 Parse 方法如Int32.Parse。
1隐式转换 对于内置的数值类型如果要存储的值无需截断或四舍五入即可适应变量则可以进行隐式转换。对于整型类型这意味着源类型的范围是目标类型范围的正确子集。 例如long 类型64位的变量可以存储 int32位可存储的任何值。 隐式转换是 C# 默认的以安全方式进行的转换不会导致数据丢失。 示例如下
int num 2147483647;
long bigNum num;Console.WriteLine(bigNum); // 2147483647
Console.WriteLine(bigNum.GetType()); // System.Int64 上例展示的值类型之间的转换。而对于引用类型隐式转换始终存在于从一个类转换为该类的任何一个直接或间接的基类或接口的情况。 由于派生类始终包含基类的所有成员因此不必使用任何特殊语法。 示例如下
using System; public class Base
{public void baseMethod(){Console.WriteLine(Hello,Base);}
}public class Derived : Base
{// 派生类方法实现
}public class Program
{static void Main(string[] args){Derived d new Derived();Base b d; // 引用类型转换 b.baseMethod(); // Hello,Base }
}下表展示了 C# 支持的内置数值类型之间的预定义隐式转换
从到sbyteshort、int、long、float、double、decimal 或 nint。byteshort、ushort、int、uint、long、ulong、float、double、decimal、nint 或 nuintshortint、long、float、double、decimal 或 nintushortint、uint、long、ulong、float、double、decimal、nint 或 nuintintlong、float、double、decimal 或 nintuintlong、ulong、float、double、decimal 或 nuintlongfloat、double 或 decimalulongfloat、double 或 decimalfloatdoublenintlong、float、double 或 decimalnuintulong、float、double 或 decimal
注意
任何整型数值类型都可以隐式转换为任何浮点数值类型。不存在针对 byte 和 sbyte 类型的隐式转换。 不存在从 double 和 decimal 类型的隐式转换。decimal 类型和 float 或 double 类型之间不存在隐式转换。类型 int 的常量表达式的值例如由整数文本所表示的值如果在目标类型的范围内则可隐式转换为 sbyte、byte、short、ushort、uint、ulong、nint 或 nuint 。
2显式转换 显示转换又称为强制转换。当类型转换可能会导致信息丢失时则需要执行显示转换。 显示转换可以理解为 你打算进行转换且你知道可能会发生数据丢失或者你知道强制转换有可能在运行时失败。 若要执行强制转换请在要转换的值或变量前面使用 () 标识符指定要强制转换到的类型。 示例如下
using System; public class Program
{static void Main(){double x 1234.7;int a;// 将double类型转换为int类型。 a (int)x;Console.WriteLine(a);}
}// 输出1234上例演示的是值类型之间的强制类型转化。 对于引用类型如果需要从基类转换为派生类型 则必须进行显示强制转换。 示例如下
using System;public class Base
{public void baseMethod(){Console.WriteLine(Hello,Base);}
}public class Derived : Base
{// 派生类方法实现
}public class Program
{static void Main(string[] args){Derived d1 new Derived();Base b d1; // 隐式转换, 派生类转换为基类 Derived d2 (Derived)b; // 显示转换基类转换为派生类 Console.WriteLine(d2); // Derived }
}下表展示了 C# 不存在隐式转换的内置数值类型之间的预定义显式转换
从到sbytebyte、ushort、uint、ulong 或 nuintbytesbyteshortsbyte、byte、ushort、uint、ulong 或 nuintushortsbyte、byte 或 shortintsbyte、byte、short、ushort、uint、ulong 或 nuint。uintsbyte、byte、short、ushort 或 intlongsbyte、byte、short、ushort、int、uint、ulong、nint 或 nuintulongsbyte、byte、short、ushort、int、uint、long、nint 或 nuintfloatsbyte、byte、short、ushort、int、uint、long、ulong、decimal、nint 或 nuintdoublesbyte、byte、short、ushort、int、uint、long、ulong、float、decimal、nint 或 nuintdecimalsbyte、byte、short、ushort、int、uint、long、ulong、float、double、nint 或 nuintnintsbyte、byte、short、ushort、int、uint、ulong 或 nuintnuintsbyte、byte、short、ushort、int、uint、long 或 nint
注意
显式数值转换可能会导致数据丢失或引发异常通常为 OverflowException溢出异常。将整数类型的值转换为另一个整数类型时结果取决于溢出检查上下文在未检查的上下文中则转换始终成功。将 decimal 值转换为整型类型时此值会向零舍入到最接近的整数值。将 double 或 float 值转换为整型类型时此值会向零舍入到最接近的整数值。将 double 转换为 float 时double 值舍入为最接近的 float 值。 如果 double 值太小或太大无法匹配 float 类型结果将为零或无穷大。将 decimal 转换为 float 或 double 时源值分别舍入为最接近的 float 或 double 值。将 float 或 double 转换为 decimal 时, 如果源值太小无法表示为 decimal结果为零。
3程序类转换 除了隐式和显式转换之外C# 还提供了内置的 System.Convert 类和 Parse 方法来帮助类型转换。System.Convert 类可以将一个基本数据类型转换为另一个基本数据类型。 而例如 Int32.Parse 方法可以将数字的字符串表示形式转换为它的等效 32 位有符号整数。 列举 System.Convert 类中常用的转换方法
方法描述ToBoolean转换为等效的布尔值。ToByte转换为等效的 8 位无符号整数。ToChar转换为等效的 Unicode 字符值。ToDateTime返回指定的 DateTime 对象。ToDecimal转换为等效的十进制数ToDouble转换为等效的双精度浮点数。ToInt16转换为等效的 16 位带符号整数。ToInt32转换为等效的 32 位带符号整数。ToInt64转换为等效的 64 位带符号整数。ToSbyte转换为等效的 8 位带符号整数。ToSingle转换为等效的单精度浮点数。ToString转换为其等效的字符串表示形式。ToUInt16转换为无符号 16 位整数。ToUInt32转换为无符号 32 位整数。ToUInt64转换为无符号 64 位整数。
示例如下
using System;public class Program
{static void Main(string[] args){string s 123; int i 75;float f 53.005f;double d 2345.7652;bool b true;Console.WriteLine(Convert.ToInt32(s)); // 123Console.WriteLine(Convert.ToString(i)); // 75 Console.WriteLine(Convert.ToDouble(f)); // 53.005001068115234 Console.WriteLine(Convert.ToSingle(d)); // 2345.7651Console.WriteLine(Convert.ToInt32(b)); // 1}
}列举 C# 常用的 Parse 方法
方法描述int.Parse(string s)将数字的字符串转换为它的等效的整数类型。float.Parse(string s)将数字的字符串转换为它的等效的单精度浮点类型。double.Parse(string s)将数字的字符串转换为它的等效的双精度浮点类型。decimal.Parse(string s)将数字的字符串转换为它的等效的精准数据类型。char.Parse(string s)将数字的字符串转换为它的等效的字符类型。
示例如下
string s 11;
string c 1;Console.WriteLine(int.Parse(s)); // 11
Console.WriteLine(float.Parse(s)); // 11
Console.WriteLine(double.Parse(s)); // 11
Console.WriteLine(decimal.Parse(s)); // 11
Console.WriteLine(char.Parse(c)); // 1结语 以上就是 C# 数据类型转换的总结啦希望能够对大家有所帮助。望大家多多支持你们的支持就是笔者创作最大的动力