显示页面讨论反向链接回到顶部 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====== C# 基础:变量声明与类型转换 ====== 本章节详细讲解 C# 中的 `var` 隐式类型声明,以及不同数据类型之间的显式(强制)转换和隐式转换。 ===== 1. var 隐式类型声明 ===== 在 C# 中,`var` 关键字用于声明变量,但不需要明确指定数据类型。编译器会根据赋值符号右侧的数据自动推断出变量的类型。 **特点:** * 必须在声明时初始化(赋值)。 * 一旦类型被推断确定,该变量的类型就固定了(强类型),不能再赋值为其他类型的数据。 * `var` 并非动态类型(dynamic),它是在编译时确定的。 <code csharp> // 传统声明 int age = 25; string name = "Alice"; // var 声明 var i = 10; // 编译器推断 i 为 int 类型 var s = "Hello"; // 编译器推断 s 为 string 类型 var d = 10.5; // 编译器推断 d 为 double 类型 // 错误示例 // var x; // 报错:必须初始化 // i = "Text"; // 报错:无法将 string 隐式转换为 int </code> ===== 30:显式/隐式转换 ===== 在编程中,经常需要将一种数据类型转换为另一种数据类型。C# 提供了两种主要的转换机制。 ==== 30-1: 区别 ==== ^ 转换类型 ^ 描述 ^ 示例场景 ^ 安全性 ^ | **隐式转换** (Implicit) | 系统自动完成,不需要特殊语法。通常发生在将**小范围**数据类型转换为**大范围**数据类型时。 | `int` 转 `double` | 安全,不会丢失数据精度。 | | **显式转换** (Explicit) | 需要程序员手动编写代码(强制转换)。通常发生在将**大范围**数据类型转换为**小范围**数据类型时。 | `double` 转 `int` | 不安全,可能会丢失精度(如小数部分被截断)或溢出。 | <code csharp> // --- 隐式转换示例 --- int i = 999; double d = i; // 因为 double 的取值范围涵盖了 int,所以系统自动转换 Console.WriteLine(d); // 输出 999 // --- 显式转换示例 --- double d2 = 888.20; // int i2 = d2; // 这样写会报错,因为 double 包含小数,int 装不下 int i2 = (int)d2; // 强制转换语法:(目标类型)变量 // 注意:强制转换通常会直接截断小数部分 Console.WriteLine(i2); // 输出 888 </code> ==== 30-2: 转换函数 (Convert 类) ==== 除了使用 `(type)` 进行强制转换外,C# 还提供了 `System.Convert` 类来进行类型转换。这通常用于处理实现了 `IConvertible` 接口的类型。 以下是常用的转换方法列表: | 方法名 | 描述 | 对应 C# 类型 | | :--- | :--- | :--- | | **ToBoolean** | 如果可能的话,把类型转换为布尔型 | `bool` | | **ToByte** | 把类型转换为字节类型 | `byte` | | **ToChar** | 把类型转换为单个 Unicode 字符类型 | `char` | | **ToDateTime** | 把类型(整数或字符串)转换为日期-时间结构 | `DateTime` | | **ToDecimal** | 把浮点型或整数类型转换为十进制类型(高精度) | `decimal` | | **ToDouble** | 把类型转换为双精度浮点型 | `double` | | **ToInt16** | 把类型转换为 16 位整数类型 | `short` | | **ToInt32** | 把类型转换为 32 位整数类型 | `int` | | **ToInt64** | 把类型转换为 64 位整数类型 | `long` | | **ToSByte** | 把类型转换为有符号字节类型 | `sbyte` | | **ToSingle** | 把类型转换为单精度浮点数类型 | `float` | | **ToString** | 把类型转换为字符串类型 | `string` | | **ToUInt16** | 把类型转换为 16 位无符号整数类型 | `ushort` | | **ToUInt32** | 把类型转换为 32 位无符号整数类型 | `uint` | | **ToUInt64** | 把类型转换为 64 位无符号整数类型 | `ulong` | ==== 30-3: 转换案例详解 ==== 以下是几种常见的具体转换场景及代码实现。 === 30-3-1:Double 转 Int32 === 使用 `Convert.ToInt32` 进行转换。 **注意:** 与 `(int)` 强制转换不同,`Convert.ToInt32` 会进行**四舍五入**(遵循银行家舍入法),而 `(int)` 是直接截断小数。 <code csharp> Double kar = 33.666; // 使用 Convert 类 int num = Convert.ToInt32(kar); // 结果 num 为 34 (四舍五入) // 对比强制转换 int numCast = (int)kar; // 结果 numCast 为 33 (截断) </code> === 30-3-2:String 转 Int32 === 将用户输入的字符串(String)转换为数值(Int)进行运算。主要有两种方式:`int.Parse()` 和 `Convert.ToInt32()`。 **基本用法:** <code csharp> string num_string = "985"; // 方式 A: 使用 Parse int num1 = int.Parse(num_string); // 方式 B: 使用 Convert int num2 = Convert.ToInt32(num_string); </code> **异常处理:** 如果字符串包含非数字字符(如字母),转换会抛出异常。 <code csharp> string cong = "985a"; // 包含字母,不是纯数字 try { int kar = Convert.ToInt32(cong); } catch (FormatException) { Console.WriteLine("转换失败:输入字符串格式不正确"); } </code> **Parse 与 Convert 的细微区别:** * 如果字符串为 `null`: * `Convert.ToInt32(null)` 返回 `0`。 * `int.Parse(null)` 抛出 `ArgumentNullException` 异常。 === 30-3-3:Int 转 String === 几乎所有数据类型都拥有 `.ToString()` 方法,用于将其转换为字符串表现形式。 <code csharp> int number = 123; string text = number.ToString(); // 也可以在 ToString 中添加格式化参数 string money = number.ToString("C"); // 转换为货币格式,如 "¥123.00" </code> === 30-3-4:String 转 UShort === 将字符串转换为 `ushort` (无符号16位整数,范围 0 ~ 65535)。常用于读取端口号或特定硬件参数。 <code csharp> // 假设 read_L.Text 是一个文本框控件的属性 string inputText = "5000"; // 模拟读取到的文本 // 使用 Convert.ToUInt16 ushort read_wd_L = Convert.ToUInt16(inputText); // 或者使用 Parse ushort read_wd_L_Parse = ushort.Parse(inputText); </code> 登录 Detach Close 该主题尚不存在 您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。 csharp/显式隐式转换.txt 最后更改: 2025/11/24 16:59由 张叶安 登录