亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

掌握 C# 类型转换:隐式、显式、Parse 与 Convert 全方位指南

C# 类型转换完全指南

全面掌握 C# 类型转换核心技术:从隐式/显式转换到 Parse/Convert API,附最佳实践与避坑指南,写出类型安全且高效的代码。

类型转换——将值从一种数据类型转换为另一种——是 C# 开发的核心技能。理解何时、如何使用各种转换方式,能让你的代码兼具安全性与表达力。

C# 转换主要分两大类:

  1. 隐式类型转换
  2. 显式类型转换(强制转换)

1. 隐式类型转换

当转换绝无数据丢失风险时,编译器自动完成,无需任何语法标记。典型场景:小范围数值类型向大范围类型转换(如 int → double)。

示例:隐式转换

using System;

namespace MyApplication {
    class Program {
        static void Main(string[] args) {
            int numInt = 500;
            // 隐式转换:int → double
            double numDouble = numInt;

            Console.WriteLine($"numInt 值: {numInt}");
            Console.WriteLine($"numInt 类型: {numInt.GetType()}");
            Console.WriteLine($"numDouble 值: {numDouble}");
            Console.WriteLine($"numDouble 类型: {numDouble.GetType()}");
            Console.ReadLine();
        }
    }
}

输出

numInt 值: 500
numInt 类型: System.Int32
numDouble 值: 500
numDouble 类型: System.Double

double 容量大于 int,编译器安全提升类型,零风险。

注意:隐式转换永不丢失数据,但会增加结果类型的存储占用。

2. 显式类型转换(强制转型)

当转换可能丢失数据(大范围→小范围)或类型间无隐式转换关系时,必须显式指明意图。编译器会在潜在数据丢失时发出警告。

示例:显式转换

using System;

namespace MyApplication {
    class Program {
        static void Main(string[] args) {
            double numDouble = 1.23;
            // 显式强制转换:double → int
            int numInt = (int)numDouble;

            Console.WriteLine($"原始 double 值: {numDouble}");
            Console.WriteLine($"转换后 int 值: {numInt}");
            Console.ReadLine();
        }
    }
}

输出

原始 double 值: 1.23
转换后 int 值: 1

小数部分被截断(向零取整)。若需四舍五入,请在转换前使用 Math.Round 等方法。

注意:强制转换也称为类型转型(Type Casting)。

3. 字符串转数值:Parse() 方法

将 string 转为数值类型时,int.Parse、double.Parse 等提供直观、类型安全的方式。

示例:int.Parse

using System;

namespace Conversion {
    class Program {
        static void Main(string[] args) {
            string n = "100";
            int a = int.Parse(n);

            Console.WriteLine($"原始字符串: {n}");
            Console.WriteLine($"转换后 int: {a}");
            Console.ReadLine();
        }
    }
}

输出

原始字符串: 100
转换后 int: 100
重要:解析非数字字符串(如 "test")会抛出 FormatException。生产代码必须用 try-catch 或 int.TryParse 处理异常。

4. Convert 类:通用转换利器

System.Convert 静态类提供广泛的类型间转换方法,内部常包含空值检查、溢出检测等安全逻辑。

方法说明
ToBoolean()转为 bool
ToChar()转为 char
ToDouble()转为 double
ToInt16()转为 16 位 int
ToInt32()转为 32 位 int(常用)
ToInt64()转为 64 位 long
ToString()转为 string(任意类型通用)
ToDateTime()转为 DateTime

示例:int ↔ string、double

using System;

namespace Conversion {
    class Program {
        static void Main(string[] args) {
            int num = 100;
            Console.WriteLine($"int 值: {num}");

            string str = Convert.ToString(num);
            Console.WriteLine($"string 值: {str}");

            double dbl = Convert.ToDouble(num);
            Console.WriteLine($"double 值: {dbl}");
            Console.ReadLine();
        }
    }
}

输出

int 值: 100
string 值: 100
double 值: 100

示例:string ↔ double

using System;

namespace Conversion {
    class Program {
        static void Main(string[] args) {
            string str = "99.99";
            Console.WriteLine($"原始字符串: {str}");

            double dbl = Convert.ToDouble(str);
            Console.WriteLine($"转换后 double: {dbl}");

            double num = 88.9;
            Console.WriteLine($"原始 double: {num}");

            string newStr = Convert.ToString(num);
            Console.WriteLine($"转换后字符串: {newStr}");
            Console.ReadLine();
        }
    }
}

输出

原始字符串: 99.99
转换后 double: 99.99
原始 double: 88.9
转换后字符串: 88.9

示例:int → bool

using System;

namespace Conversion {
    class Program {
        static void Main(string[] args) {
            int num1 = 0;
            int num2 = 1;
            bool bool1 = Convert.ToBoolean(num1);
            bool bool2 = Convert.ToBoolean(num2);

            Console.WriteLine($"0 转 bool: {bool1}");
            Console.WriteLine($"1 转 bool: {bool2}");
            Console.ReadLine();
        }
    }
}

输出

0 转 bool: False
1 转 bool: True
规则:C# 中 0 视为 false,任意非零整数均视为 true。

核心对比与选择指南

场景推荐方式理由
数值类型扩大(无损)隐式转换代码最简洁,零风险
数值类型缩小(可能丢失)显式转型 (T)value明确表达开发者意图
字符串 → 数值(确信格式合法)T.Parse()性能最好,语义明确
字符串 → 数值(格式不确定)T.TryParse()无异常开销,模式匹配友好
任意类型 → stringConvert.ToString() 或 .ToString()前者处理 null 安全,后者需实例非空
复杂/跨类型转换Convert 类内置溢出检查、null 处理、格式支持
用户自定义类型转换运算符重载 implicit/explicit operator语言级支持,用法最自然

掌握这些转换技术,你将能编写出类型安全、意图清晰、运行时错误最少的 C# 代码。

C语言

  1. ASTM A1018 CS Type B 低碳钢规格与典型性能参数
  2. ASTM A424 Type II 低碳钢规格与性能指标
  3. ASTM A424 Type I 低碳钢关键性能与应用表现
  4. ASTM A792 CS Type A 镀铝锌钢板 — 低碳钢基材性能与规格详解
  5. ASTM A53 Grade A Type E 电阻焊钢管 — 规格与关键性能参数
  6. ASTM A53 Grade A Type S 无缝钢管 — 规格与关键性能参数
  7. ASTM A792 Grade CS Type C 镀铝锌钢板 — 关键性能与规格参数
  8. ASTM A653 CS A类:规格与关键性能
  9. 精通Python类型转换与强制转换:综合指南
  10. 精通 Python 数字、类型转换与数学运算
  11. 掌握 Java 类型转换:从自动拓宽到强制收窄及更多
  12. Java 泛型深度解析:类型安全、擦除机制与通配符实战