string 与 String 的区别

在C#中 string​ 和 String 到底有什么区别?哪个才是正确的写法?

一、本质:同一个类型

C# 中 string​ 和 String​ 指向同一个类型------System.String

csharp 复制代码
// 以下两行完全等价
string a = "hello";
String b = "hello";

// 验证类型相同
Console.WriteLine(typeof(string) == typeof(String));  // True
Console.WriteLine(typeof(string).FullName);            // System.String

核心解析:

  1. string :C# 关键字,编译时自动映射为 System.String
  2. String :.NET 基类库中的完整类型名,需要 using System; 才能直接使用

划重点: string​ 是语法糖,String​ 是真实类型。就像 int​ 对应 System.Int32​,bool​ 对应 System.Boolean

二、使用场景:何时用哪个

2.1 变量声明:推荐 string

csharp 复制代码
// ✅ 推荐:关键字更简洁
string name = "张三";
string message = "Hello World";

// ❌ 不推荐:写法啰嗦
String name = "张三";

2.2 调用静态方法:推荐 String

csharp 复制代码
// ✅ 推荐:静态方法用 String 更清晰
string result = String.Format("Hello {0}", name);
bool isEmpty = String.IsNullOrEmpty(name);

// 也可以,但不够直观
string result = string.Format("Hello {0}", name);

2.3 类名引用:必须用 String

csharp 复制代码
// 反射、泛型约束等场景必须用 String
Type t = typeof(String);
var list = new List<String>();

三、编码规范:统一风格

推荐做法如下:

场景 推荐写法 原因
变量声明 string 关键字更简洁,符合 C# 风格
参数/返回值 string 保持一致性
静态方法调用 String 明确表示调用的是 .NET 类型方法
类型引用 String 反射、泛型等场景必须用

常见坑: 混用两种写法会导致代码风格不统一,降低可读性。先看一个混用示例:

csharp 复制代码
// ❌ 混用风格
String GetName(string id) {
    return String.Format("User_{0}", id);
}

// ✅ 统一风格
string GetName(string id) {
    return string.Format("User_{0}", id);
}

四、性能差异

结论:没有性能差异。

csharp 复制代码
// 编译后完全相同的 IL 代码
string a = "hello";
String b = "hello";

两者编译为相同的中间语言(IL),运行时行为完全一致。

五、总结

对比项 string String
本质 C# 关键字 .NET 类型
完整名称 System.String System.String
是否需要 using 不需要 需要 using System;
推荐场景 变量声明 静态方法/类型引用
性能 相同 相同

最后: 记住一个原则------变量声明用 string,调用静态方法 / 引用类型名用 String 这不是技术问题,而是代码风格和可读性的选择。统一风格比纠结哪个"更正确"更重要。