.NET中“字符串”和“字符串”之间的区别是什么?


15

在.NET Framework中,至少在C#语言中,我们有两个字符串类型的“版本”:

  • “串”
  • “串”

看来它们是可互换的,但它们是真的吗?如果它们不可互换,通常在一种情况下使用一种替代另一种更好吗?



2
从风格上讲,当我引用类型时,我倾向于使用小写版本,而在调用System.String的静态方法时,我倾向于使用大写版本。
乔尔·穆勒


2
string在中不存在.net,仅在C#中存在。
CodesInChaos 2012年

1
尽管这可能更适合于Stack Overflow,但我认为对于程序员而言,这并不是完全不适合的话题,而且由于Stack Overflow已经至少有一个重复项,因此迁移它没有多大意义。因此,请停止标记/关闭投票以进行迁移,如果您认为应该将其关闭,这很酷,但是应该关闭而不迁移。
yannis

Answers:


30

嗯,根据MSDN

string是.NET Framework中String的别名。

实际上是“字符串”的地方System.String

我要说的是它们是可互换的,在何时何地使用一种或另一种没有什么区别。

最好与您使用过的一致。


由于某种原因,我想到String是围绕值键入字符串的类包装器,这导致装箱的想法……我在这里完全错了吗?
亚伦·奥诺德

1
@Gabriel否,String(因此起string别名)是引用类型。
克里斯·哈珀

@Gabriel:Java不会使用byte vs Byte之类的东西吗?
whatsisname 2012年

Double,double和其他数据类型是否也一样?
加文·科茨

1
@AaronAnodide我相信这是Java约定,可能是您听说过的。
KChaloux

20

如前所述,它们是同一件事,string只是的别名String

对于它的价值,我string用来声明类型-变量,属性,返回值和参数。这与使用其他系统类型一致- ,,int 等(虽然和boolvarInt32Boolean也是正确的)。

我用String使用String类的静态方法的时候,喜欢String.Split()String.IsNullOrEmpty()。我觉得这更有意义,因为这些方法属于一个类,并且与我使用其他静态方法的方式一致。


我们也在工作中使用此约定,我喜欢它。我的大脑会自动建立连接。
SBI 2014年

4

我建议使用小写字母string。大写字母String将使用在导入的命名空间中找到的第一个名为String的类System.String。可以改用您自己的String类。


3
如果您具有相同名称的两个不同的导入类型,并且使用该名称而没有名称空间限定,则会出现错误。
svick

可能会欺骗我们String,而永远不会欺骗string
Bryan Boettcher

不过,我认为这并不是使用的充分理由string
svick

5
在其他所有条件相同的情况下,“一个人可能会打破”与“一个人永远不会打破”又如何呢?
Bryan Boettcher

4

string 是一个C#关键字,只是该关键字的别名 System.String

..但因为它是关键字,所以语法着色编辑器/ IDE将以关键字颜色显示它,与int,double,if,else等相同。在风格上,您可能更喜欢使用关键字而不是System.String类型(或紧随String其后)你做完了using System;)。

这是一个特殊点虽然,因为虽然boolcharintdoublestring对于系统类型的所有关键字的别名,string是奇数一法,因为它是一个引用类型,其余为值类型。


4
object也是引用类型的关键字别名
nikie 2012

哦,是的,我忘了所有有关那件事-谢谢提醒。
JBRWilkinson

2

string只是String它们的别名,它们最终是相同的。

你可以用你喜欢哪个,虽然我一般用string的时候我打算使用它就像一个基本数据类型(类似intfloatbool),并String当我使用它作为一个对象/类规划。例如:

string foo = "   ";
if (String.isNullOrWhitespace(foo)) 
{
    // ...
}

在上述情况下,我计划foo仅使用存储一些文本(有效地作为原始文本),因此我使用string; 但是,当我打电话时String.isNullOrWhitespace(string)我使用String。我这样做是因为通常类名的首字母大写(String),而基元的首字母(例如int)则大写。


-2

String与命名空间System.String一起使用,string与C#编译器规范一起使用,而且System.String是引用类型值。您最好处理系统对象,字符串仅用于文字目的。系统和系统都工作相同。

string TC = new System.String('/', 5);

字符串也用于比较,相等和其他目的。


4
这似乎并没有提供超过先前6个答案的实质性内容
gnat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.