这两者之间有什么不同,我应该使用哪一个?
string s = "Hello world!";
String s = "Hello world!";
这两者之间没有区别 - 然而,在考虑其他开发者的源代码时,字符串
似乎是更受欢迎的选择。
有一个在其他地方未提及的支持使用帕斯卡命名法 String
的理由:
System.String
是一种引用类型,按照惯例,引用类型的名称通常采用帕斯卡命名法。
Int32
类型所证明的那样。摒弃关键字而选择类名来遵守某些想象中的规则,这个做法并没有意义,因为引用类型并没有遵循不同于值类型的命名约定。 - P Daddy两者是一样的。不同之处在于你如何使用它。
约定俗成的是,
string 用于变量
String 用于调用其他 String 类的方法
例如:
string fName = "John";
string lName = "Smith";
string fullName = String.Concat(fName,lName);
if (String.IsNullOrEmpty(fName))
{
Console.WriteLine("Enter first name");
}
String
,程序会建议你"简化你的代码",将它转换为string
。 - Massimiliano Krausstring
和String
之间有一个实际的区别。
nameof(String); // compiles
nameof(string); // doesn't compile
string
是一个关键字(在这种情况下是别名),而String
是一种类型。| Alias | Type |
|-----------|------------------|
| bool | System.Boolean |
| byte | System.Byte |
| sbyte | System.SByte |
| char | System.Char |
| decimal | System.Decimal |
| double | System.Double |
| float | System.Single |
| int | System.Int32 |
| uint | System.UInt32 |
| long | System.Int64 |
| ulong | System.UInt64 |
| object | System.Object |
| short | System.Int16 |
| ushort | System.UInt16 |
| string | System.String |
String
类型之前添加一个using System;
指令,而不是使用C#关键字string
。这应该是被选中的答案,或者至少是一个高票答案。 - mins实际上没有什么区别。
C#关键字string映射到.NET类型System.String - 它是一个保持语言命名约定的别名。
如果真的想看到 string
和 System.String
之间没有区别,那么以下内容可能会有所帮助:
var method1 = typeof(MyClass).GetMethod("TestString1").GetMethodBody().GetILAsByteArray();
var method2 = typeof(MyClass).GetMethod("TestString2").GetMethodBody().GetILAsByteArray();
//...
public string TestString1()
{
string str = "Hello World!";
return str;
}
public string TestString2()
{
String str = "Hello World!";
return str;
}
两者生成的IL字节数组完全相同:
[ 0, 114, 107, 0, 0, 112, 10, 6, 11, 43, 0, 7, 42 ]
return "Hello World!";
。为了确保类型被“考虑”,你可以使用return (string)(object)typeof(string).Name;
和return (System.String)(System.Object)typeof(System.String).Name;
,这也证实了System.Object
与object
是相同的 :-) - Mark HurdString
指的是一个带有多种操作字符串的函数的字符串对象。
string
指的是一种原始类型。
在C#中,它们都编译为String,但在其他语言中则不然,因此如果想要处理字符串对象,应使用String;如果想要处理字面值,则应使用string。
C#中,字符串是System.String (String)的简写。 它们基本上是指同一件事。
这就像bool
和Boolean
,差别不大。
string
是System.String
的简写版本。 - Taslim Oseni首先,string
和String
不同。它们的区别在于:String
不是关键字,可以用作标识符;而string
是关键字,不能用作标识符。
我将通过以下示例进行解释:
当我在Visual Studio中输入string s;
并将鼠标悬停在上面时(不带颜色),会出现以下内容:
这说明string是System.String
,对吧?
文档位于https://msdn.microsoft.com/en-us/library/362314fe.aspx。第二句话说:“string是.NET Framework中String的别名。”
string
是 C# 语法的一个 词法 构造,而System.String
只是一种类型。无论任何规范中提到的 显式 差异如何,仍然存在这种隐含的差异,可能会带来一些歧义。语言本身必须以一种不需要考虑 BCL 中的特定类的方式支持string
。 - Kirk Wollstring
存在问题。需要缩写System.String
,但作为别名,它看起来非常相似,但不完全相同。然而,经过几年的C#编程,我认为,安全起见,可以直接使用string
和string.Format()
,不用担心System.String
。 - RolandSystem.String
类还在,而string
关键字仍然是它的别名,就像System.Int32
和int
一样。它们实际上是同一个东西。 - Craig Tullis