C#中的String和string关键字有什么区别

本文概述

  • 定论
  • 笔记
如果你来自其他编程背景(例如Java), 则可能会注意到, 在C#中, 你可以使用string和String在代码中声明字符串变量。
String textA = "Hello"; string textB = "Hello";

你可能会问自己, 无论如何它们都有效, 但是它们之间有什么区别吗?技术上没有。
字符串是C#中System.String的别名。可以在int和System.Int32这样的情况下进行比较, 可以是整数, 也可以是bool和Boolean。它们都被编译为IL(中间语言)中的System.String。
string是保留字, String是类名。这意味着字符串本身不能用作变量名, 即:
StringBuilder String = new StringBuilder(); // Compile succesfully StringBuilder string = new StringBuilder(); // Doesn't compile

因此, 使用字符串很方便, 使用字符串的代码将永不中断, 但是使用字符串的代码将很少。 (你可以重新定义String, 但不能重新定义string)。
如果需要专门引用该类, 建议使用String即:
Decimal pricePerOunce = 17.36m; String s = String.Format("The current price is {0:C2} per ounce.", pricePerOunce);

字符串只是C#内置的所有别名之一, 与Java不同。你可以在以下列表中查看所有别名:
object: System.Objectstring: System.Stringbool: System.Booleanbyte: System.Bytesbyte: System.SByteshort: System.Int16ushort: System.UInt16int: System.Int32uint: System.UInt32long: System.Int64ulong: System.UInt64float: System.Singledouble: System.Doubledecimal: System.Decimalchar: System.Char

【C#中的String和string关键字有什么区别】如前所述, 你可以使用别名, 而无需导入use System。
定论string是一个关键字, 你不能使用string作为标识符。
字符串不是关键字, 你可以将其用作标识符:
string String = "I am a string";

关键字字符串是System.String的别名, 除了关键字issue之外, 两者是完全等效的, 因此:
typeof(string) == typeof(String) == typeof(System.String)

笔记
  • 你可以在不导入任何组件的情况下使用字符串, 这与String相反, 因为如果不使用System则不能使用String。预先。
  • 你不能在反射中使用字符串;你必须使用String。
  • 为避免混淆, 请始终使用其中之一。但是从最佳实践的角度来看, 当你进行变量声明时, 最好使用字符串, 并且在将其用作类名时使用String是首选。

    推荐阅读