37

在 C# 中有String对象和string对象。

两者有什么区别?关于使用的最佳实践是什么?

4

12 回答 12

34

没有区别。string(小写)只是 System.String 的别名。

于 2008-09-22T18:15:55.757 回答
16

没有不同。System.String与 严格相同string。通用 C# 编码准则表明您应该使用关键字string.

于 2008-09-22T18:17:25.423 回答
11

它们是别名并且可以互换。但是,在风格上,对于声明,我使用小写的字符串,对于静态方法,我使用 String。

string foo = "bar";

if( foo != String.Empty )
{
   Console.WriteLine(String.Format("foo.Length = {0}", foo.Length));
}
于 2008-09-22T18:16:59.777 回答
4

一种是 System.String 的 .Net 类型,另一种是特定于 C# 的,它原来是 System.String 的别名。

http://msdn.microsoft.com/en-us/library/362314fe(VS.71).aspx

于 2008-09-22T18:17:39.183 回答
3

没有区别。string 是编译器转换为 System.String 的别名。

事实上,它甚至在 MSIL 中有别名:

.method private hidebysig static void  Main(string[] args) cil managed
于 2008-09-22T18:16:06.003 回答
2

它们之间没有区别。string 只是 System.String 的别名。编译时,它们都被编译为 System.String 对象。

于 2008-09-22T18:16:10.560 回答
2

小写版本只是实际类 String 的别名。就 IL 生成而言,没有真正的区别。

于 2008-09-22T18:16:19.093 回答
2

没有区别。string 是一个 C# 语言关键字,它引用 System.String 类,就像 int 是一个引用 System.Int32 的关键字一样。

于 2008-09-22T18:17:46.953 回答
2

将来,尝试编译一个同时使用两者的应用程序,然后使用 Reflector(将语言更改为 IL)查看编译后的输出。你会发现没有区别。

于 2008-09-22T19:09:39.840 回答
1

没有区别,因为 string 被编译器转换为 System.String 。与所有常见类型相同(int 转到 System.Int32 等)。我们使用简单的名称,以便它们脱颖而出。

于 2008-09-22T18:17:15.317 回答
1

考虑到“int”在某些语言中因 16 位/32 位系统而异,“字符串”将来可能会演变为与 System.String 不同。

但就目前而言。

于 2008-09-22T20:39:35.550 回答
1

请注意:字符串/字符串不是唯一的几个别名:例如。Integer,Int32, int 都是别名。

@mliesen:它不会在 C# 中发生,它不像 C。这是因为从 C# 你不会创建可执行文件,而是创建每个编译的代码,如 java。

于 2008-09-22T20:48:07.277 回答