Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么字符串存在小写和大写版本?我应该使用哪种版本?_C# - Fatal编程技术网

C# 为什么字符串存在小写和大写版本?我应该使用哪种版本?

C# 为什么字符串存在小写和大写版本?我应该使用哪种版本?,c#,C#,好吧,这可能是个愚蠢的问题,但我找不到任何相关信息 String.Empty和String.Empty是否相同?我总是倾向于使用大写版本(String.Empty),因为我更喜欢IDE中的颜色和外观,而不是小写版本(String.Empty) 有没有一种“正确”的方式来使用这些不同的东西,或者完全是因为个人喜好?这是我的假设,他们都是一样的,但老实说,我从来没有考虑过这一点,直到今天我想“如果他们都存在,他们都必须存在的原因” 有谁知道的原因吗?如果是,是什么?谁能启发我 另外,“精确复制品”只

好吧,这可能是个愚蠢的问题,但我找不到任何相关信息

String.Empty和String.Empty是否相同?我总是倾向于使用大写版本(String.Empty),因为我更喜欢IDE中的颜色和外观,而不是小写版本(String.Empty)

有没有一种“正确”的方式来使用这些不同的东西,或者完全是因为个人喜好?这是我的假设,他们都是一样的,但老实说,我从来没有考虑过这一点,直到今天我想“如果他们都存在,他们都必须存在的原因”

有谁知道的原因吗?如果是,是什么?谁能启发我

另外,“精确复制品”只回答了问题的一半——“哪个是对的?”,而不是“它们为什么都存在?”


精确副本

精确副本

在C#中,小写类型名称是
系统的别名。xxx
类型名称,例如
string
equals
System.string
int
equals
System.Int32

为了保持一致性,最好将这些语言别名用于类型名,而不是它们的框架等价物。所以你做错了。;-)

至于它们都存在的原因,.NET类型之所以存在,是因为它们是在称为CTS(公共类型系统)的.NET库的独立于语言的标准中定义的。我无法理解为什么C#定义这些别名(VB做了一些非常类似的事情)。我想这两个原因是

  • 习惯。通过为一些基本类型提供相同的类型名,让所有这些C和Java程序员使用C
  • 惰性:您不必导入
    系统
    名称空间来使用它们
  • 编辑由于许多人似乎更喜欢另一种符号,让我指出这一点绝非不合理。实际上,使用CTS类型名称而不是C#的关键字是一个很好的例子,其他答案中提供了一些表面上很好的参数。从纯洁/风格的角度来看,我可能会同意


    但是,考虑一下这是否值得打破一个已经建立的有助于跨项目统一代码的约定。

    它在概念上类似于这样的事情:

    using int=System.Int32
    

    string映射到string类AFAIK,因此它们是相同的


    例如int和Int32也是如此。

    它们都是相同的

    就我个人而言,我更喜欢使用小写字符串“blue one”,使用C#关键字而不是.NET类名,原因与我使用int而不是Int32的原因相同。
    此外,小写的不需要包含系统名称空间…

    就我个人而言,我更喜欢使用字符串,因为字符串和对象都是引用,而所有其他基类型都是值类型。在我看来,这是最清晰的分离。

    hmm,看起来我太慢了:)因此,根据您所做的,如果您需要正好32位,您可能希望使用
    Int32
    而不是
    int
    。我认为
    int
    可能不能保证它总是32位,否则就没有理由使用关键字了。@styfle:Nah,是的。从C#规范:•int类型表示值介于–2147483648和2147483647之间的有符号32位整数
    int
    Int32
    的别名。已多次询问。在提交新问题之前,可能想搜索常见的、可能被问到的问题。我已经检查了以前被问到的问题列表,但没有找到这些问题。谢谢你指出这些。非常有用。那些“精确的副本”只回答了我问题的一半——“哪种方法正确?”。我的另一半问题是“它们为什么都存在?”,这两个“完全相同”的答案都没有。我还发现,使用谷歌作为Stackoverflow的搜索引擎要比在网站上实现的SQL全文搜索好得多。谷歌搜索“c#site:stackoverflow.com中字符串和字符串的区别”。我发现googleOoh的效果要好得多,很好的提示,我从来没有想过……不,他“倾向于使用大写版本(String.Empty)”,因此按照你的说法做得不对……你的意思是说不使用这些别名是最佳做法吗?还有,我不希望键入Int32而不是int。我倾向于在声明类型时使用别名,在调用静态成员时使用实际名称。所以对于我来说,int foo、String.Empty和Int32.Parse也是微软推荐的使用数据类型别名版本的编程实践。这不是真的。string和System.string是完全一样的东西:Evan不明白Shalmanese说了什么。。。这个答案并不是说它们不一样,只是字符串(和字符串)是引用,而不是值类型。为了清楚起见,不要传播错误信息:字符串在内部实现为引用类型,但在使用中它表现为值类型(因此应该使用与
    int
    bool
    等相同的命名约定)。例如,请参见。就个人而言,我更喜欢小写字符串,但这个答案给出了一个很好的观点。字符串是引用类型,也是不可变的,因此使用相同的约定作为值类型有点奇怪。