示例(注意案例):
string s = "Hello world!"; String s = "Hello world!";
每个使用 guidelines 是什么?什么是 differences ?
string是C#中System.String的别名 .从技术上讲,没有区别 . 就像int vs. System.Int32 .
就指南而言,通常建议您在引用对象时使用 string .
string
例如
string place = "world";
同样,我认为如果您需要专门参考该课程,通常建议使用 String .
String
string greet = String.Format("Hello {0}!", place);
看来这个领域的指导可能已经改变了,因为StyleCop现在强制使用C#特定的别名 .
正如其他人所说,他们是一样的 . 默认情况下,StyleCop规则将强制您使用 string 作为C#代码样式最佳实践,除非引用 String.Format ,静态函数,例如 String.Format , String.Join , String.Concat 等...
String.Format
String.Join
String.Concat
我想在Ritchers的书中将这个添加到lfousts的答案中:
C#语言规范指出,“作为一种风格问题,使用关键字比使用完整的系统类型名称更受青睐 . ”我不同意语言规范;我更喜欢使用FCL类型名称并完全避免基本类型名称 . 实际上,我希望编译器甚至不提供原始类型名称,并强迫开发人员使用FCL类型名称 . 以下是我的理由:我看到许多开发人员感到困惑,不知道是否在他们的代码中使用字符串或字符串 . 因为在C#string(一个关键字)中精确映射到System.String(一种FCL类型),所以没有区别,可以使用它们 . 类似地,我听说一些开发人员说当应用程序在32位操作系统上运行时,int表示32位整数,当应用程序在64位操作系统上运行时,它表示64位整数 . 这句话绝对是错误的:在C#中,int总是映射到System.Int32,因此它表示一个32位整数,而不管代码运行的操作系统如何 . 如果程序员在他们的代码中使用Int32,那么这种潜在的混淆也会被消除 . 在C#中,长映射到System.Int64,但是在不同的编程语言中,long可以映射到Int16或Int32 . 事实上,C / CLI确实将long视为Int32 . 如果某人使用一种语言阅读源代码,如果他或她习惯于使用不同的编程语言进行编程,则很容易误解代码的意图 . 实际上,大多数语言甚至不会将long视为关键字,也不会编译使用它的代码 . FCL有许多方法,它们将类型名称作为其方法名称的一部分 . 例如,BinaryReader类型提供诸如ReadBoolean,ReadInt32,ReadSingle等方法,System.Convert类型提供诸如ToBoolean,ToInt32,ToSingle等方法 . 虽然编写下面的代码是合法的,但是浮点线对我来说感觉非常不自然,并且线条是正确的并不明显:BinaryReader br = new BinaryReader(...);float val = br.ReadSingle(); //好的,但感觉不自然Single val = br.ReadSingle(); //好的,感觉很好许多使用C#的程序员都倾向于忘记可以使用其他编程语言来对抗CLR,因此,C#-isms会进入类库代码 . 例如,Microsoft的FCL几乎全部用C#编写,FCL团队的开发人员现在已经在库中引入了方法,例如Array的GetLongLength,它返回一个在C#中很长的Int64值,但在其他语言中却没有(如C / CLI) ) . 另一个例子是System.Linq.Enumerable的LongCount方法 .
在我阅读完整段落之前,我没有得到他的意见 .
没有区别 .
C#关键字 string 映射到.NET类型 System.String - 它是一个保持语言命名约定的别名 .
System.String
同样, int 映射到 System.Int32 .
int
System.Int32
This YouTube视频实际上展示了它们的不同之处 .
但现在需要很长的文字答案 .
当我们谈论 .NET 时,有两个不同的东西,一个是 .NET 框架,另一个是使用该框架的语言( C# , VB.NET 等) .
.NET
C#
VB.NET
“ System.String " a.k.a " String " ( capital " S”)是 .NET 框架数据类型,而"string"是 C# 数据类型 .
简而言之,“String”是“string”的别名(使用不同的名称调用相同的东西) . 因此从技术上讲,下面的代码语句都会提供相同的输出 .
String s = "I am String";
要么
string s = "I am String";
同样,其他c#数据类型也有别名,如下所示: -
对象: System.Object ,字符串: System.String ,bool: System.Boolean ,字节: System.Byte ,sbyte: System.SByte ,短: System.Int16 等等
System.Object
System.Boolean
System.Byte
System.SByte
System.Int16
Now the million dollar question from programmer's point of view So when to use "String" and "string"?
避免混淆的第一件事是始终如一地使用其中一个 . 但是从最佳实践的角度来看,当你做变量声明时,最好使用“string”(小“s”)并在你使用它时作为类名,则首选“String”(大写“S”) .
在下面的代码中,左侧是变量声明,它使用“string”声明 . 在右侧,我们调用一种方法,因此“字符串”更明智 .
string s = String.ToUpper() ;
我曾听说过在C#中使用提供的类型别名的最佳答案来自Jeffrey Richter在他的书_130063中 . 以下是他的3个理由:
我看到许多开发人员感到困惑,不知道是否在代码中使用字符串或字符串 . 因为在C#中,字符串(关键字)完全映射到System.String(一种FCL类型),所以没有区别,可以使用它们 . 在C#中,长映射到System.Int64,但是在不同的编程语言中,long可以映射到Int16或Int32 . 实际上,C / CLI确实将long视为Int32 . 如果某人使用一种语言阅读源代码,如果他或她习惯于使用不同的编程语言进行编程,则很容易误解代码的意图 . 实际上,大多数语言甚至不会将long视为关键字,也不会编译使用它的代码 . FCL有许多方法,它们将类型名称作为其方法名称的一部分 . 例如,BinaryReader类型提供诸如ReadBoolean,ReadInt32,ReadSingle等方法,System.Convert类型提供诸如ToBoolean,ToInt32,ToSingle等方法 . 虽然编写下面的代码是合法的,但浮点线对我来说感觉非常不自然,并且线条不正确并不明显:
BinaryReader br = new BinaryReader(...); float val = br.ReadSingle(); // OK, but feels unnatural Single val = br.ReadSingle(); // OK and feels good
所以你有它 . 我认为这些都非常好 . 但是,我发现自己在自己的代码中没有使用Jeffrey的建议 . 也许我太困在我的C#世界,但我最终试图使我的代码看起来像框架代码 .
System.String 是.NET字符串类 - 在C#中 string 是 System.String 的别名 - 因此在使用它们时是相同的 .
至于指导方针,我不会陷入困境,只是使用你想要的任何东西 - 生活中有更重要的事情,无论如何代码都是一样的 .
如果你发现你自己构建系统需要指定你正在使用的整数的大小,所以倾向于使用 Int16 , Int32 , UInt16 , UInt32 等,那么使用 String 看起来更自然 - 并且当它们在不同的地方之间移动时.net语言它可能使事情更容易理解 - 否则我会使用string和int .
Int16
Int32
UInt16
UInt32
String 代表 System.String ,它是.NET Framework类型 . System.String 在C#语言中为 System.String . 它们都被编译为 System.String in IL (中间语言),所以没有区别 . 选择你喜欢的并使用它 . 如果你用C#编写代码,我更喜欢 string ,因为它是C#类型的别名,并且是C#程序员所熟知的 .
关于 (int, System.Int32) 等,我可以这么说 .
对于其他程序员似乎常见的做法,我更喜欢 String 而不是 string ,只是为了强调 String 是一个参考类型,正如Jon Skeet所提到的那样 .
6年零5个月后的新答案(拖延) .
虽然 string 是一个始终具有固定含义的保留C#关键字,但 String 只是一个可以引用任何内容的普通标识符 . 根据当前类型的成员,当前命名空间和应用的 using 指令及其位置, String 可以是与 global::System.String 不同的值或类型 .
using
global::System.String
我将提供两个例子,其中 using 指令无济于事 .
首先,当 String 是当前类型(或局部变量)的 value 时:
class MySequence<TElement> { public IEnumerable<TElement> String { get; set; } void Example() { var test = String.Format("Hello {0}.", DateTime.Today.DayOfWeek); } }
以上将不会编译,因为 IEnumerable<> 没有名为 Format 的非静态成员,并且不适用扩展方法 . 在上面的例子中,仍然可以在其他上下文中使用 String ,其中类型是语法上唯一的可能性 . 例如 String local = "Hi mum!"; 可能没问题(取决于命名空间和 using 指令) .
IEnumerable<>
Format
String local = "Hi mum!";
更糟糕的是:说 String.Concat(someSequence) 很可能(取决于 using )转到Linq扩展方法 Enumerable.Concat . 它不会转到静态方法 string.Concat .
String.Concat(someSequence)
Enumerable.Concat
string.Concat
其次,当 String 是另一个 type 时,嵌套在当前类型中:
class MyPiano { protected class String { } void Example() { var test1 = String.Format("Hello {0}.", DateTime.Today.DayOfWeek); String test2 = "Goodbye"; } }
Example 方法中的任何一个语句都没有编译 . 这里 String 总是钢琴string, MyPiano.String . 没有成员( static 或不) Format 在其上(或从其基类继承) . 并且值 "Goodbye" 无法转换为它 .
Example
MyPiano.String
static
"Goodbye"
真的,这是一个惯例问题 . string 看起来更像是C / C风格 . 一般约定是使用您选择的语言提供的任何快捷方式(int / Int为 Int32 ) . 这也适用于"object"和 decimal .
decimal
从理论上讲,这可能有助于将代码移植到未来的64位标准中,其中"int"可能意味着 Int64 ,但这不是重点,我希望任何升级向导都能将 int 引用更改为 Int32 无论如何只是为了安全起见 .
Int64
C#是一种使用的语言与CLR一起 .
string 是C#中的类型 .
System.String 是CLR中的一种类型 .
当您将CL#与CLR一起使用时 string 将映射到 System.String .
从理论上讲,您可以实现生成Java字节码的C#编译器 . 这个编译器的合理实现可能会将 string 映射到 java.lang.String ,以便与Java运行时库进行互操作 .
string 是 System.String 的别名(或简写) . 这意味着,通过输入 string ,我们的意思是 System.String . 您可以在思考链接中阅读更多内容:'string' is an alias/shorthand of System.String.
string 是保留字,但 String 只是一个类名 . 这意味着 string 本身不能用作变量名 .
如果由于某种原因你想要一个名为string的变量,你只能看到第一个这样的编译:
StringBuilder String = new StringBuilder(); // compiles StringBuilder string = new StringBuilder(); // doesn't compile
如果你真的想要一个名为string的变量名,你可以使用 @ 作为前缀:
@
StringBuilder @string = new StringBuilder();
另一个重要区别:Stack Overflow以不同的方式强调它们 .
两者都是一样的 . 但从编码指南的角度来看,最好使用 string 而不是 String . 这是开发人员通常使用的 . 例如而不是使用 Int32 我们使用 int ,因为 int 是 Int32 的别名
仅供参考“关键字字符串只是预定义类 System.String 的别名 . ” - C#语言规范4.2.3 http://msdn2.microsoft.com/En-US/library/aa691153.aspx
String 不是关键字,可以用作标识符,而 string 是关键字,不能用作标识符 . 而且在功能上看两者都是一样的 .
是的,他们之间没有区别,就像 bool 和 Boolean 一样 .
bool
Boolean
仅仅为了完整起见,这里是相关信息的大脑转储......
正如其他人所说, 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 .
object
System.IntPtr
在规范中,值类型别名称为"simple types" . 文字可用于每种简单类型的常量值;没有其他值类型具有可用的文字形式 . (与VB比较,允许 DateTime 文字,并且也有它的别名 . )
DateTime
在某种情况下,您必须使用别名:明确指定枚举的基础类型时 . 例如:
public enum Foo : UInt32 {} // Invalid public enum Bar : uint {} // Valid
这只是规范定义枚举声明的方式问题 - 冒号之后的部分必须是整数型 生产环境 ,这是 sbyte , byte , short , ushort , int , uint , long , ulong , char 的一个标记 . ..而不是例如变量声明所使用的类型 生产环境 . 它并不表示任何其他差异 .
sbyte
byte
short
ushort
uint
long
ulong
char
最后,当谈到使用它时:我个人在各处使用别名来实现,但是任何API都使用CLR类型 . 如果你在API中引用一个类型,那么你真的很重要的是,你要以语言中立的方式这样做 . 名为 ReadInt32 的方法是明确的,而名为 ReadInt 的方法需要解释 . 例如,调用者可能正在使用为 Int16 定义 int 别名的语言 . .NET框架设计者遵循了这种模式,良好的例子在 BitConverter , BinaryReader 和 Convert 类中 .
ReadInt32
ReadInt
BitConverter
BinaryReader
Convert
String( System.String )是基类库中的一个类 . string(小写)是C#中的保留工作,它是System.String的别名 . Int32 vs int与 Boolean vs. bool 类似 . 这些特定于C#语言的关键字使您能够以类似于C的样式声明基元 .
Boolean vs. bool
从Daniel Solis' book这个问题有一个引用 .
所有预定义类型都直接映射到基础.NET类型 . C#类型名称(字符串)只是.NET类型(String或System.String)的别名,因此使用.NET名称在语法上可以很好地工作,尽管不鼓励这样做 . 在C#程序中,您应该使用C#名称而不是.NET名称 .
string 是关键字,您不能使用字符串作为标识符 .
String 不是关键字,您可以将其用作标识符:
string String = "I am a string";
除关键字问题外,关键字 string 是 System.String 的别名,两者完全等效 .
typeof(string) == typeof(String) == typeof(System.String)
聚会迟到:我100%使用CLR类型(好吧,除非被迫使用C#类型,但我不记得最后一次是什么时候) .
根据Ritchie的CLR书籍,我最初几年前开始做这件事 . 我认为所有CLR语言最终都必须能够支持CLR类型集合,因此使用CLR类型本身提供了更清晰,可能更“可重用”的代码 .
既然我已经做了多年,这是一种习惯我喜欢VS为CLR类型显示的颜色 .
唯一真正的失败是自动完成使用C#类型,所以我最终重新键入自动生成的类型来指定CLR类型 .
而且,现在,当我看到“int”或“string”时,我看起来真的错了,就像我在看1970年代的C代码一样 .
string 只是 System.String 的别名 . 编译器会以相同的方式处理它们 .
唯一的实际区别是你提到的语法高亮,如果你使用 String 你必须写 using System .
using System
使用系统类型可以更容易地在C#和VB.Net之间进行移植,如果你是这样的话 .
出于格式化原因,我更喜欢大写的 .NET 类型(而不是别名) . .NET 类型的颜色与其他对象类型相同(值类型是适当的对象,毕竟) .
条件和控制关键字(如 if , switch 和 return )为小写且为深蓝色(默认情况下) . 而且我宁愿在使用和格式方面没有分歧 .
if
switch
return
考虑:
String someString; string anotherString;
它's been covered above; however, you can'在反射中使用 string ;你必须使用 String .
小写 string 是 System.String 的别名 . 它们在 C# 中是相同的 .
关于是否应该使用系统类型( System.Int32 , System.String 等)类型或 C# aliases ( int , string 等)存在争议 . 我个人认为你应该使用 C# aliases ,但这只是我个人的偏好 .
C# aliases
两者之间没有区别 - string ,但在考虑其他开发人员的源代码时似乎是首选方案 .
There is one difference - 事先没有 using System; 你不能使用 String .
using System;
string 和 String 在所有方面都相同(大写"S"除外) . 无论如何都没有性能影响 .
由于语法高亮,大多数项目中首选小写 string
30 回答
string是C#中System.String的别名 .
从技术上讲,没有区别 . 就像int vs. System.Int32 .
就指南而言,通常建议您在引用对象时使用
string
.例如
同样,我认为如果您需要专门参考该课程,通常建议使用
String
.例如
这是Microsoft在其示例中倾向于使用的样式 .
看来这个领域的指导可能已经改变了,因为StyleCop现在强制使用C#特定的别名 .
正如其他人所说,他们是一样的 . 默认情况下,StyleCop规则将强制您使用
string
作为C#代码样式最佳实践,除非引用String.Format
,静态函数,例如String.Format
,String.Join
,String.Concat
等...我想在Ritchers的书中将这个添加到lfousts的答案中:
在我阅读完整段落之前,我没有得到他的意见 .
没有区别 .
C#关键字
string
映射到.NET类型System.String
- 它是一个保持语言命名约定的别名 .同样,
int
映射到System.Int32
.This YouTube视频实际上展示了它们的不同之处 .
但现在需要很长的文字答案 .
当我们谈论
.NET
时,有两个不同的东西,一个是.NET
框架,另一个是使用该框架的语言(C#
,VB.NET
等) .“
System.String
" a.k.a " String " ( capital " S”)是.NET
框架数据类型,而"string"是C#
数据类型 .简而言之,“String”是“string”的别名(使用不同的名称调用相同的东西) . 因此从技术上讲,下面的代码语句都会提供相同的输出 .
要么
同样,其他c#数据类型也有别名,如下所示: -
对象:
System.Object
,字符串:System.String
,bool:System.Boolean
,字节:System.Byte
,sbyte:System.SByte
,短:System.Int16
等等Now the million dollar question from programmer's point of view So when to use "String" and "string"?
避免混淆的第一件事是始终如一地使用其中一个 . 但是从最佳实践的角度来看,当你做变量声明时,最好使用“string”(小“s”)并在你使用它时作为类名,则首选“String”(大写“S”) .
在下面的代码中,左侧是变量声明,它使用“string”声明 . 在右侧,我们调用一种方法,因此“字符串”更明智 .
我曾听说过在C#中使用提供的类型别名的最佳答案来自Jeffrey Richter在他的书_130063中 . 以下是他的3个理由:
所以你有它 . 我认为这些都非常好 . 但是,我发现自己在自己的代码中没有使用Jeffrey的建议 . 也许我太困在我的C#世界,但我最终试图使我的代码看起来像框架代码 .
System.String
是.NET字符串类 - 在C#中string
是System.String
的别名 - 因此在使用它们时是相同的 .至于指导方针,我不会陷入困境,只是使用你想要的任何东西 - 生活中有更重要的事情,无论如何代码都是一样的 .
如果你发现你自己构建系统需要指定你正在使用的整数的大小,所以倾向于使用
Int16
,Int32
,UInt16
,UInt32
等,那么使用String
看起来更自然 - 并且当它们在不同的地方之间移动时.net语言它可能使事情更容易理解 - 否则我会使用string和int .String
代表System.String
,它是.NET Framework类型 .System.String
在C#语言中为System.String
. 它们都被编译为 System.String in IL (中间语言),所以没有区别 . 选择你喜欢的并使用它 . 如果你用C#编写代码,我更喜欢string
,因为它是C#类型的别名,并且是C#程序员所熟知的 .关于 (int, System.Int32) 等,我可以这么说 .
对于其他程序员似乎常见的做法,我更喜欢
String
而不是string
,只是为了强调String
是一个参考类型,正如Jon Skeet所提到的那样 .6年零5个月后的新答案(拖延) .
虽然
string
是一个始终具有固定含义的保留C#关键字,但String
只是一个可以引用任何内容的普通标识符 . 根据当前类型的成员,当前命名空间和应用的using
指令及其位置,String
可以是与global::System.String
不同的值或类型 .我将提供两个例子,其中
using
指令无济于事 .首先,当
String
是当前类型(或局部变量)的 value 时:以上将不会编译,因为
IEnumerable<>
没有名为Format
的非静态成员,并且不适用扩展方法 . 在上面的例子中,仍然可以在其他上下文中使用String
,其中类型是语法上唯一的可能性 . 例如String local = "Hi mum!";
可能没问题(取决于命名空间和using
指令) .更糟糕的是:说
String.Concat(someSequence)
很可能(取决于using
)转到Linq扩展方法Enumerable.Concat
. 它不会转到静态方法string.Concat
.其次,当
String
是另一个 type 时,嵌套在当前类型中:Example
方法中的任何一个语句都没有编译 . 这里String
总是钢琴string,MyPiano.String
. 没有成员(static
或不)Format
在其上(或从其基类继承) . 并且值"Goodbye"
无法转换为它 .真的,这是一个惯例问题 .
string
看起来更像是C / C风格 . 一般约定是使用您选择的语言提供的任何快捷方式(int / Int为Int32
) . 这也适用于"object"和decimal
.从理论上讲,这可能有助于将代码移植到未来的64位标准中,其中"int"可能意味着
Int64
,但这不是重点,我希望任何升级向导都能将int
引用更改为Int32
无论如何只是为了安全起见 .C#是一种使用的语言与CLR一起 .
string 是C#中的类型 .
System.String 是CLR中的一种类型 .
当您将CL#与CLR一起使用时 string 将映射到 System.String .
从理论上讲,您可以实现生成Java字节码的C#编译器 . 这个编译器的合理实现可能会将 string 映射到 java.lang.String ,以便与Java运行时库进行互操作 .
string
是System.String
的别名(或简写) . 这意味着,通过输入string
,我们的意思是System.String
. 您可以在思考链接中阅读更多内容:'string' is an alias/shorthand of System.String.string
是保留字,但String
只是一个类名 . 这意味着string
本身不能用作变量名 .如果由于某种原因你想要一个名为string的变量,你只能看到第一个这样的编译:
如果你真的想要一个名为string的变量名,你可以使用
@
作为前缀:另一个重要区别:Stack Overflow以不同的方式强调它们 .
两者都是一样的 . 但从编码指南的角度来看,最好使用
string
而不是String
. 这是开发人员通常使用的 . 例如而不是使用Int32
我们使用int
,因为int
是Int32
的别名仅供参考“关键字字符串只是预定义类
System.String
的别名 . ” - C#语言规范4.2.3 http://msdn2.microsoft.com/En-US/library/aa691153.aspxString
不是关键字,可以用作标识符,而string
是关键字,不能用作标识符 . 而且在功能上看两者都是一样的 .是的,他们之间没有区别,就像
bool
和Boolean
一样 .仅仅为了完整起见,这里是相关信息的大脑转储......
正如其他人所说,
string
是System.String
的别名 . 它们编译为相同的代码,因此在执行时没有任何区别 . 这只是C#中的别名之一 . 完整清单是:除了
string
和object
之外,别名都是值类型 .decimal
是值类型,但不是CLR中的基本类型 . 唯一没有别名的原始类型是System.IntPtr
.在规范中,值类型别名称为"simple types" . 文字可用于每种简单类型的常量值;没有其他值类型具有可用的文字形式 . (与VB比较,允许
DateTime
文字,并且也有它的别名 . )在某种情况下,您必须使用别名:明确指定枚举的基础类型时 . 例如:
这只是规范定义枚举声明的方式问题 - 冒号之后的部分必须是整数型 生产环境 ,这是
sbyte
,byte
,short
,ushort
,int
,uint
,long
,ulong
,char
的一个标记 . ..而不是例如变量声明所使用的类型 生产环境 . 它并不表示任何其他差异 .最后,当谈到使用它时:我个人在各处使用别名来实现,但是任何API都使用CLR类型 . 如果你在API中引用一个类型,那么你真的很重要的是,你要以语言中立的方式这样做 . 名为
ReadInt32
的方法是明确的,而名为ReadInt
的方法需要解释 . 例如,调用者可能正在使用为Int16
定义int
别名的语言 . .NET框架设计者遵循了这种模式,良好的例子在BitConverter
,BinaryReader
和Convert
类中 .String(
System.String
)是基类库中的一个类 . string(小写)是C#中的保留工作,它是System.String的别名 . Int32 vs int与Boolean vs. bool
类似 . 这些特定于C#语言的关键字使您能够以类似于C的样式声明基元 .从Daniel Solis' book这个问题有一个引用 .
string 是关键字,您不能使用字符串作为标识符 .
String 不是关键字,您可以将其用作标识符:
Example
除关键字问题外,关键字
string
是System.String
的别名,两者完全等效 .聚会迟到:我100%使用CLR类型(好吧,除非被迫使用C#类型,但我不记得最后一次是什么时候) .
根据Ritchie的CLR书籍,我最初几年前开始做这件事 . 我认为所有CLR语言最终都必须能够支持CLR类型集合,因此使用CLR类型本身提供了更清晰,可能更“可重用”的代码 .
既然我已经做了多年,这是一种习惯我喜欢VS为CLR类型显示的颜色 .
唯一真正的失败是自动完成使用C#类型,所以我最终重新键入自动生成的类型来指定CLR类型 .
而且,现在,当我看到“int”或“string”时,我看起来真的错了,就像我在看1970年代的C代码一样 .
string
只是System.String
的别名 . 编译器会以相同的方式处理它们 .唯一的实际区别是你提到的语法高亮,如果你使用
String
你必须写using System
.使用系统类型可以更容易地在C#和VB.Net之间进行移植,如果你是这样的话 .
出于格式化原因,我更喜欢大写的
.NET
类型(而不是别名) ..NET
类型的颜色与其他对象类型相同(值类型是适当的对象,毕竟) .条件和控制关键字(如
if
,switch
和return
)为小写且为深蓝色(默认情况下) . 而且我宁愿在使用和格式方面没有分歧 .考虑:
它's been covered above; however, you can'在反射中使用
string
;你必须使用String
.小写
string
是System.String
的别名 . 它们在C#
中是相同的 .关于是否应该使用系统类型(
System.Int32
,System.String
等)类型或C# aliases
(int
,string
等)存在争议 . 我个人认为你应该使用C# aliases
,但这只是我个人的偏好 .两者之间没有区别 -
string
,但在考虑其他开发人员的源代码时似乎是首选方案 .There is one difference - 事先没有
using System;
你不能使用String
.string
和String
在所有方面都相同(大写"S"除外) . 无论如何都没有性能影响 .由于语法高亮,大多数项目中首选小写
string