在C#中,String和string有什么区别?

43 浏览
0 Comments

在C#中,String和string有什么区别?

这两个有什么区别,我应该使用哪一个?

string s = "Hello world!";
String s = "Hello world!";

admin 更改状态以发布 2023年5月21日
0
0 Comments

为了完整起见,这里是相关信息的脑力倾泻...

正如其他人指出的那样,stringSystem.String 的别名。假设你的代码使用 String 编译成了 System.String(即你没有使用某个不同的命名空间中具有不同 String 类型的 using 指令),它们编译成相同的代码,因此在执行时根本没有任何区别。这只是 C# 中的一个别名。完整列表如下:

object:  System.Object
string:  System.String
bool:    System.Boolean
byte:    System.Byte
sbyte:   System.SByte
short:   System.Int16
ushort:  System.UInt16
int:     System.Int32
uint:    System.UInt32
long:    System.Int64
ulong:   System.UInt64
float:   System.Single
double:  System.Double
decimal: System.Decimal
char:    System.Char

除了 stringobject,这些别名都是值类型。 decimal 是值类型,但不是 CLR 中的原始类型。唯一没有别名的原始类型是 System.IntPtr

在规范中,值类型别名被称为“简单类型”。文字可以用于每个简单类型的常量值;其他值类型没有可用的文字形式。(与 VB 相比,它允许 DateTime 文字,并且也有别名。)

有一种情况下你必须使用别名:当显式指定枚举的基础类型时。例如:

public enum Foo : UInt32 {} // Invalid
public enum Bar : uint   {} // Valid

这只是规范定义枚举声明的一种方式 - 冒号后面的部分必须是 integral-type production,它是 sbytebyteshortushortintuintlongulongchar 的一个标记...与变量声明使用的类型不同。这并不表示任何其他区别。

最后,关于使用哪个:个人使用别名实现,但在任何 API 中使用 CLR 类型。在实现方面,使用哪个并不太重要 - 团队内的一致性很好,但其他人并不在乎。另一方面,如果在 API 中引用类型,以语言中立的方式这样做是真正重要的。例如,名为 ReadInt32 的方法是明确的,而名为 ReadInt 的方法需要解释。调用方可能使用一个将 int 别名定义为 Int16 的语言。.NET 框架的设计者遵循了这个模式,在 BitConverterBinaryReaderConvert 类中有很好的例子。

0
0 Comments

string 是 C# 中 System.String 的别名。
因此,在技术上没有区别。这就像 int vs. System.Int32 一样。

至于指导方针,一般建议在引用对象时使用 string

例如:

string place = "world";

同样地,如果需要特定地引用该类,则一般建议使用 String

例如:

string greet = String.Format("Hello {0}!", place);

这是 Microsoft 在 它们的示例 中倾向于使用的风格。

在这个领域的指导似乎已经发生了变化,因为 StyleCop 现在强制使用 C# 特定的别名。

0