C# 内置类型和文本

C# 提供了丰富的内置类型------整数、浮点数、布尔值、字符和字符串------无需额外引用即可直接使用。这篇汇总了所有常用内置类型及其字面量写法,是一份实用的速查参考。

  1. 数值类型intdoubledecimal 等各自的特点和适用场景
  2. 文本语法:整数、浮点数、字符串的各种字面量写法
  3. 特殊声明vardefaultdynamic 的使用方式

一、数值类型

C# 提供了整数、浮点数和十进制数的内置数值类型,最常用的是 intdoubledecimal

1.1 整数类型

类型 范围 示例 后缀
int ±21 亿 int population = 67_000_000;
long ±9×10¹⁸ long distance = 384_400_000L; L
short ±32767 short temp = -40;
byte 0~255 byte red = 255;

1.2 浮点类型

类型 精度 示例 后缀
double 64 位(默认) double pi = 3.141592653589793; 无(或 d
float 32 位 float gravity = 9.81f; f
decimal 128 位精确小数 decimal price = 19.99m; m

使用建议:

  • 常规计算用 double
  • 内存受限用 float
  • 需要精确小数(如金额)用 decimal

1.3 无符号类型

每个有符号整数类型都有对应的无符号版本,仅存储非负值,正数范围扩大一倍。

有符号 → 无符号 典型用途
intuint 文件大小、计数器
longulong 超大非负值
shortushort 网络端口号

1.4 本机大小的整数

nintnuint 与平台指针大小匹配(32 位 / 64 位自适应),主要用于互操作和低级内存操作。日常开发中通常使用 int / long

二、bool、char 和 string

类型 说明 示例
bool true / false bool isValid = true;
char 单个 Unicode 字符,单引号 char grade = 'A';
string 不可变字符序列,双引号 string greeting = "Hello, world!";

三、文本语法(字面量)

3.1 整数文本

csharp 复制代码
int dec = 42;               // 十进制
int hex = 0x2A;             // 十六进制(0x 前缀)
int bin = 0b_0010_1010;     // 二进制(0b 前缀)
long big = 1_000_000_000L;  // 千位分隔符 _

划重点: _ 分隔符纯粹是为了可读性,编译器会忽略它,不影响数值。

3.2 浮点文本

csharp 复制代码
double d = 3.14;            // 默认 double
float f = 3.14f;            // f 后缀 → float
decimal m = 3.14m;          // m 后缀 → decimal
double scientific = 1.5e6;  // 科学计数法 = 1500000

3.3 字符和字符串文本

csharp 复制代码
// 转义字符
char newline = '\n';
char unicode = '\u0041';            // 'A'

// 字符串内插
string message = $"Found {dec} items";

// 逐字字符串(旧语法)
string path = @"C:\Users\docs\file.txt";

// 原始字符串字面量(C# 11+)
string json = """{"name":"Alice"}""";

// 原始 + 内插
string raw = $"""Found {dec} items in "{greeting}" """;

代码解析:

  1. $"" :字符串内插,大括号内可直接写表达式。
  2. @"" :逐字字符串,反斜杠不转义,适合写路径。
  3. """""" :原始字符串字面量(三个双引号),内部可以任意使用引号而无需转义,适合嵌入 JSON、XML 等内容。

四、特殊声明方式

4.1 default 表达式

生成类型的默认值:数值类型为 0,引用类型为 null

csharp 复制代码
int defaultInt = default;          // 0
string defaultStr = default;       // null
var limit = args.Length > 0
    ? int.Parse(args[0])
    : default(int);                // 条件表达式中的 default

4.2 var 类型推断

编译器从初始值推断类型,推断后仍是强类型,不会变成动态类型。

csharp 复制代码
var count = 10;          // → int
var name = "C#";         // → string
var items = new List<string>();  // → List<string>

4.3 目标类型 new

当类型可从上下文推断时,省略 new 后面的类型名称。

csharp 复制代码
List<string> names = new() { "Alice", "Bob" };
Dictionary<int, string> map = new();

4.4 dynamic 类型

绕过编译时类型检查,在运行时解析操作。主要用于 COM 互操作或动态语言交互。

csharp 复制代码
dynamic value = 42;
value = "Now I'm a string";  // 编译通过,运行时解析

常见坑: dynamic 会失去编译时安全保护,拼写错误的方法名只会在运行时崩溃。一般应用代码中应尽量避免使用。

五、快速决策参考

场景 推荐类型
计数、索引 int
大数值(超出 21 亿) long
科学计算、普通浮点 double
金额、精确计算 decimal
内存敏感、大量数组 float
状态标记 bool
单字符 char
文本 string

最后

C# 的内置类型体系遵循"够用不复杂"的原则------int / double / decimal / bool / string 这五个类型覆盖了 80% 以上的日常开发场景。剩下的 longfloatbyte 等按需选用即可。