String和C#中的字符串有什么区别?
示例(注意案例):
string s = "Hello world!";
String s = "Hello world!";
什么是使用每个指导原则 ? 有什么区别 ?
string
是C#中System.String
的别名。
从技术上讲,没有区别。 这就像int
与System.Int32
。
就指导原则而言,通常建议您在引用某个对象时使用string
。
例如
string place = "world";
同样,我认为一般建议使用String
如果你需要特别提到该类。
例如
string greet = String.Format("Hello {0}!", place);
这是微软在他们的例子中倾向于使用的风格。
看起来这个领域的指导可能已经改变了,因为StyleCop现在强制使用C#特定的别名。
为了完整起见,这里是相关信息的大脑转储...
正如其他人所指出的, string
是System.String
的别名。 它们编译成相同的代码,所以在执行时没有任何区别。 这只是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
除了string
和object
,别名都是值类型。 decimal
是一个值类型,但不是CLR中的基本类型。 唯一没有别名的基本类型是System.IntPtr
。
在规范中,值类型别名被称为“简单类型”。 文字可以用于每个简单类型的常量值; 没有其他值类型可用文字形式。 (将它与VB相比较,VB允许使用DateTime
文字,并且也有它的别名。)
有一种情况需要使用别名:明确指定枚举的基础类型时。 例如:
public enum Foo : UInt32 {} // Invalid
public enum Bar : uint {} // Valid
这只是规范定义枚举声明的方式问题 - 冒号后的部分必须是整型生产,它是sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
, char
一个标记。 ..而不是像变量声明所使用的类型生产。 它没有表明任何其他差异。
最后,当涉及到使用哪个API时:我个人使用别名来实现实现,但CLR类型适用于任何API。 在实现方面你使用的确不重要 - 团队之间的一致性很好,但没有其他人会关心。 另一方面,如果你在一个API中引用一个类型,这是非常重要的,你以一种语言中立的方式来实现。 称为ReadInt32
的方法是明确的,而称为ReadInt
的方法需要解释。 例如,调用者可以使用为Int16
定义int
别名的语言。 .NET框架设计师遵循这种模式,在BitConverter
, BinaryReader
和Convert
类中有很好的例子。
String
代表System.String
,它是一个.NET Framework类型。 string
是 System.String
的C#语言中的别名 。 它们都被编译为IL (中级语言)中的System.String
,所以没有区别。 选择你喜欢和使用的。 如果你用C#编写代码,我宁愿使用string
因为它是C#类型的别名,并且被C#程序员熟知。
我可以说相同的( int
, System.Int32
)等。
上一篇: What is the difference between String and string in C#?