为什么“string”被认为是“String”的简化版本?

68

在C#中,当我使用方法时通常使用String,而在声明变量时则使用string。我在其他地方读到过这是保持代码简洁的首选方法,并且这让我感到很有道理。但是,在使用String时,我在Visual Studio 2015中遇到了一个新消息:Name can be simplified。VS建议改用string

为什么在VS2015中比2013中更倾向于使用string而非String

这不是这个问题的重复。那个问题询问整体上的区别,而我询问为什么VS现在建议使用其中一个;我不知道技术上是否发生了变化或其他类似的原因。


4
这是我的问题的重点。如果它基于观点,那么这将回答我的问题。我之所以问是因为VS建议这样做,而过去它并没有建议这样做,这让我相信这其中有技术原因。 - vaindil
22
在我看来,这是一个有效的问题。既不是重复的,也不基于个人观点。 - displayName
2
可能仅仅是因为大多数人更喜欢使用"string",因为它与使用"int"、"float"和其他别名保持一致。不过这显然是猜测。 - Jeroen Vannevel
5
您的问题被标记为重复,但我认为这是一个完全有效的问题。您已经被拒绝者的傲慢所困扰。 :D - displayName
2
@Servy 我真的不认为这是一个重复的问题。你能否重新考虑一下,帮我重新打开它?然后我们可以将 this 标记为远远优于 https://dev59.com/ulsW5IYBdhLWcg3wwZnG 的重复问题... ;) - Lightness Races in Orbit
显示剩余9条评论
4个回答

44

因为您在 工具 > 选项 > 文本编辑器 > C# > 代码样式 中没有取消勾选“在声明局部变量、参数和成员时首选内置预定义类型关键字”的选项。


4
这个选项在C#部分的代码风格中,而不是高级选项。但是,我认为这并不完全正确——您提出的选项会更改_变量声明_(例如,从“int”到“Int32”)。另一个类似的选项,“Prefer intrinsic predefined type keyword in member access expressions”,也会做出类似的更改(将“int.MaxValue”更改为“Int32.MaxValue”)。在VS2013中,我按照OP中描述的使用了string/String,从未触及这些选项,没有来自VS的任何消息。现在它会抛出这个消息,我不知道为什么。(顺便说一下,VS2013甚至没有这个选项。) - vaindil
1
@Vaindil:是的;这整个功能在Roslyn中都是新的。 - SLaks
这个新方法是Roslyn首选的吗?如果VS对此发出警告,我认为是这样,只是想确认一下。 - vaindil
4
@SLaks 你愿意嫁给我吗?开玩笑的,不过这个警告真的很烦人。 ulong.TryParse() 看起来和 UInt64.TryParse() 相比就是那么不对劲。 - Dan Bechard
4
在 VS 2017 中,它被称为“预定义类型喜好设置”。 - Der_Meister

16

VS2017-2019 工具 > 选项 > 文本编辑器 > C# > 代码样式 (> 预定义类型偏好:) > 对于成员访问表达式

选择 "优先使用框架类型"


VS2015 工具 > 选项 > 文本编辑器 > C# > 代码样式

取消选中 "在成员访问表达式中优先使用内置的预定义类型关键字"


在VS2015-2019中给出了此选项的示例,即

var local = int.MaxValue (优先使用预定义类型 /已选中)

变成了

var local = Int32.MaxValue (优先使用框架类型 /未选中)


ReSharper - 要禁用它/配置检查严重性,请使用 "用 CLR 类型名称或关键字替换内置类型引用" 规则。

现在没有提示我将 String.Format() 改为 string.Format()


对于 Visual Studio 2017 (15.8),属性为:'预定义类型首选项' -> 对于成员访问表达式 -> 首选框架类型 + 重新启动 VS。 - Vadym Kyrylkov

12

因为它不需要在顶部使用using System;


9

string是C#中System.String的别名,因此从技术上讲,它们没有区别。这有点像int与System.Int32。

至于你应该做什么,string是变量的首选对象,而String是类的首选对象,因为这是惯例选择。

通常看起来像这样

string example = "hello world";

string example = String.Format("Hello World {0}!", example);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接