协慌网

登录 贡献 社区

C#中字符串和字符串有什么区别?

示例( 注意案例 ):

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

使用每种方法的准则是什么?有什么区别

答案

string是 C#for System.String的别名。
从技术上讲,没有区别。这就像int System.Int32

就指南而言,通常建议您在引用对象时使用string

例如

string place = "world";

同样,我认为如果您需要专门引用该类,通常建议使用String

例如

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

这是 Microsoft 在其示例中倾向于使用的样式。

看来这个领域的指导可能已经改变,因为StyleCop现在强制使用 C#特定的别名。

仅仅为了完整起见,这里是相关信息的大脑转储......

正如其他人所说, stringSystem.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

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

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

在某种情况下,您必须使用别名:明确指定枚举的基础类型时。例如:

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

这只是规范定义枚举声明的方式问题 - 冒号之后的部分必须是整数型生成,这是sbytebyteshortushortintuintlongulongchar一个标记。 .. 而不是例如变量声明所使用的类型生产。它并不表示任何其他差异。

最后,当谈到使用它时:我个人在各处使用别名来实现,但是任何 API 都使用 CLR 类型。你在实施方面使用它并不重要 - 你的团队之间的一致性很好,但没有人会关心。另一方面,如果您在 API 中引用类型,则以语言中立的方式执行此操作,这一点非常重要。名为ReadInt32的方法是明确的,而名为ReadInt的方法需要解释。例如,调用者可能正在使用为Int16定义int别名的语言。 .NET 框架设计者已经遵循这种模式,在BitConverterBinaryReaderConvert类中有很好的例子。

String代表System.String ,它是. NET Framework 类型。 string System.String的 C#语言中的别名 。它们都被编译为IL (中间语言)中的System.String ,因此没有区别。选择你喜欢的并使用它。如果你用 C#编码,我更喜欢string因为它是 C#类型的别名,并且是 C#程序员所熟知的。

关于intSystem.Int32等我可以这么说。