C#.Net 不区分大小写的字符串

Posted

技术标签:

【中文标题】C#.Net 不区分大小写的字符串【英文标题】:C#.Net case-insensitive string 【发布时间】:2010-09-05 19:14:11 【问题描述】:

为什么 C#.Net 允许字符串对象的声明不区分大小写?

String sHello = "Hello";
string sHello = "Hello";

字符串的小写和大写 S 都是可以接受的,这似乎是唯一允许这样做的对象。

谁能解释一下原因?

【问题讨论】:

更多信息请见this question。 首先,它不区分大小写。你不能写STRINGstrinG 或其他任何东西。其次,它不是唯一具有别名的类型:objectObject 的别名; boolBoolean 的别名; doubleDouble 的别名等等。顺便提一下,void 也是 Void 的别名,但是 C# 不允许你使用 Void... 【参考方案1】:

string 是语言关键字,而 System.String 是它的别名类型。

两者都编译成完全相同的东西,类似地:

intSystem.Int32 longSystem.Int64 floatSystem.Single doubleSystem.Double charSystem.Char byteSystem.Byte shortSystem.Int16 ushortSystem.UInt16 uintSystem.UInt32 ulongSystem.UInt64

我认为在大多数情况下这是关于代码的易读性 - 所有基本系统值类型都有别名,我认为小写 string 可能只是为了保持一致性。

【讨论】:

【参考方案2】:

除其他答案外,最好使用关键字(如果存在)。

例如您应该使用 string 而不是 System.String

【讨论】:

【参考方案3】:

“String”是类的名称。 “string”是映射这个类的关键字。

好像是一样的

Int32 => 整数 十进制 => 十进制 Int64 => 长

...等等...

【讨论】:

【参考方案4】:

“字符串”是 C# 关键字。它只是“System.String”的别名——.NET BCL 类之一。

【讨论】:

【参考方案5】:

“string”只是 System-namespace 中“String”类的 C# 别名。

【讨论】:

【参考方案6】:

string 是 System.String 的别名。它们是一样的。

不过,按照惯例,类型 (System.String) 的对象通常称为别名 - 例如

string myString = "Hello";

而类上的操作使用大写版本 例如

String.IsNullOrEmpty(myStringVariable);

【讨论】:

我不认为约定特别是使用大写版本进行操作。我当然没有看到写下来的。重要的是对公共名称使用 BCL 版本,例如ReadSingle 而不是 ReadFloat。 说谁?没听说过这个约定!【参考方案7】:

我使用字符串而不是字符串, Int32 而不是 int, 这样我的语法突出显示将字符串作为类型而不是关键字。我想让关键字跳出来。

【讨论】:

以上是关于C#.Net 不区分大小写的字符串的主要内容,如果未能解决你的问题,请参考以下文章

在带有 LINQ to XML 的 VB.NET 中,where 子句在属性值和字符串之间设置不区分大小写的比较

c_cpp 不区分大小写的字符串比较

C#/.NET第六期01C#基础_01:运行环境新建C#程序的流程严格区分大小写类库的含义

C#/.NET第六期01C#基础_01:运行环境新建C#程序的流程严格区分大小写类库的含义

== 在 PHP 中是区分大小写的字符串比较吗?

SQL Server 连接字符串关键字区分大小写,尽管它们不应该是