C# 数据类型转换是一个非常有用的概念,当我们想将一个数据类型变量的值存储到另一个数据类型的变量中时,它会很有帮助。
C# 是一种静态类型语言。这意味着,用一种数据类型声明的 C# 变量不能在不将该类型转换为变量类型的情况下,再次声明以存储另一种数据类型的值。
当变量 i 被声明为整数类型时。
int i;
我们不能在 i 中存储字符串值。
i= “hai”;
C# 编译器会抛出一个错误,提示“无法将类型‘string’隐式转换为‘int’”。
然而,我们有时可能会遇到需要将一种类型的值复制到另一个数据类型不同的变量或方法参数中的情况。
也就是说,我们可能有一个整数变量,需要将其值传递给一个参数类型为 float 或 double 的方法。
C# 数据类型转换示例
这种对数据类型的操作通常称为类型转换。在这个编程中,实时会发生两种不同类型的数据类型转换。
- 隐式转换
- 显式转换
C# 隐式数据类型转换
隐式转换的意义在于,这种数据类型转换是类型安全的,并且仅在以下情况下由编译器自动完成。
- 如果转换发生时没有信息丢失。
- 如果在转换过程中没有抛出异常的可能。
让我们看一个 C# 数据类型转换的例子来更好地理解它。
例如,将 int 转换为 float 不会丢失信息,也不会抛出异常。
int i = 50;
float f = i;
上述语句是有效的,因为执行时它们不会有任何信息丢失,因为 float 的大小比 int 大得多。
但如果我们反过来,例如。
float f = 234.76;
int i = f;
这些语句在执行时会得到一个编译时错误,提示“无法将类型‘float’隐式转换为‘int’”。
原因是在将 float 的值存储到整数变量 i 的过程中会丢失信息。因为整数不允许精度(小数点后的数字),并且有可能抛出异常,因为 float 的大小比 int 大得多。
在这种情况下,我们需要使用类型转换运算符或 C# 中的 Convert 类进行显式数据类型转换。
让我们首先看看在 C# 中使用类型转换运算符。
using System;
namespace CSharp_Tutorial
{
class program
{
public static void Main()
{
float f = 234.76F;
int i = (int)f;
Console.WriteLine("Original Float Value = {0}", f);
Console.WriteLine("Converted Integer Value = {0}", i);
Console.ReadLine();
}
}
}

Float 变量 f 持有一个双精度值 234.76。
当我们尝试将其存储在整数变量 i 中时,我们需要使用类型转换运算符‘(int)’将 float 值转换为 int。
由于整数不包含小数值,它将只存储 float 值的整数部分。
即,输出为 234
使用 Convert 类进行 C# 数据类型转换
Convert 是一个用于数据类型转换的系统定义类。使用类型转换运算符和 Convert 类的唯一区别在下面的例子中解释。
using System;
namespace CSharp_Tutorial
{
class program
{
public static void Main()
{
float f = 123456778907.76F;
int i = Convert.ToInt32(f);
Console.WriteLine("Original Float Value = {0}", f);
Console.WriteLine("Converted Integer Value = {0}", i);
Console.ReadLine();
}
}
}

这里我们尝试存储一个比整数大得多的浮点值。
在这种情况下,如果我们使用 Convert 类进行类型转换,编译器会抛出一个异常。
但如果我们使用类型转换运算符,那么 C# 编译器将打印整数类型的最小值范围。
using System;
namespace CSharp_Tutorial
{
class program
{
public static void Main()
{
float f = 123456778907.76F;
int i = (int)f;
Console.WriteLine("Original Float Value = {0}", f);
Console.WriteLine("Converted Integer Value = {0}", i);
Console.ReadLine();
}
}
}
输出

这里我们尝试存储一个比整数大得多的浮点值。
在这种情况下,当使用类型转换运算符进行类型转换时,编译器将打印整数类型的最小值范围。
C# 字符串到数字(int, float, long 等)的转换
当我们要将字符串值转换为整数格式时,我们有两个选项
- Parse()
- TryParse()
例如,使用 Parse() C# 数据类型转换方法,我们可以将字符串格式的数字转换为整数格式,如下所示
using System;
namespace CSharp_Tutorial
{
class program
{
public static void Main()
{
string s = "200";
int i = int.Parse(s);
Console.WriteLine("Original String = {0}", s);
Console.WriteLine("Converted Integer Value = {0}", i);
Console.ReadLine();
}
}
}

这里的“100”是一个数字,但格式为字符串,即带有双引号。
parse 方法可用于将其转换为整数格式,并最终打印 i 变量内的值。
如果数字是字符串格式 – C# Parse 方法
如果数字是字符串格式,使用 parse() 如果无法解析该值则会抛出异常。相比之下,TryParse() 返回一个布尔值,指示解析是否成功。
如果我们确定解析在实时情况下总是有效的,那么我们使用 Parse() 方法。否则,我们使用 TryParse() 方法。
对于 C# 数据类型转换示例
using System;
namespace CSharp_Tutorial
{
class program
{
public static void Main()
{
string s = "200ab";
int i = int.Parse(s);
Console.WriteLine("Original String = {0}", s);
Console.WriteLine("Converted Integer Value = {0}", i);
Console.ReadLine();
}
}
}

这里 Parse() 方法转换失败。因此它抛出了异常。
让我们看看使用 C# TryParse() 方法
TryParse() 方法可以使用以下语法调用。
语法
TryParse(<string variable> out <integer variable>)
TryParse() 总是返回一个布尔值,如果解析成功则为 true;否则返回 false。
让我们看一下 C# TryParse 数据类型转换的示例代码。
using System;
namespace CSharp_Tutorial
{
class program
{
public static void Main()
{
string s = "200ab";
int Result = 0;
bool i = int.TryParse(s, out Result);
if (i)
{
Console.WriteLine(i);
}
else
{
Console.WriteLine("please enter any valid number");
}
Console.ReadLine();
}
}
}

这里 s 是字符串变量,其值为“200ab”。
result 是整数变量,i 是用于存储 TryParse() 结果的布尔变量。
由于 TryParse() 返回一个布尔值,我们编写了代码,如果解析成功,则打印解析结果,否则打印语句。
“请输入任何有效的数字”。