为什么新的String("Hello")在C#中无效?

Cap*_*ffe 15 .net c# string constructor

制作背后的逻辑/原因是什么?

String s= new String("Hello World");
Run Code Online (Sandbox Code Playgroud)

C#中是非法的?错误是

`string.String(char*)'的最佳重载方法匹配有一些无效的参数

我对API文档不感兴趣,我对为什么这是非法感兴趣.

是因为汇集静态字符串?像Java池整数(-128)到整数(127)与可怕的结果?(当然还有字符串)

Bro*_*ass 11

使用构造函数基于另一个现有字符串创建一个新字符串是没有意义的 - 这就是没有允许这样的构造函数重载的原因.做就是了

string s = "Hello World";
Run Code Online (Sandbox Code Playgroud)

  • 那么为什么Java中有这样的构造?;-) (4认同)
  • @Captain Giraffe` ==`(因为所有运算符)都是非多态的.`object.==(object)`是一个对象标识.但是,`string.==(string)`是值相等.这与Java(没有'==`重载)形成鲜明对比. (3认同)
  • @supercat:你的意思是字符串*变量*不是字符串.变量当然可以指向不同的字符串 - 字符串本身仍然是不可变的 (2认同)

Ode*_*ded 8

因为字符串是不可变的,并且在构造它们方面具有语言支持.

在您的示例中,由于您使用的是字符串文字,因此它将被实现.从它创建的任何复制的字符串最终都会与实际的内容池完全相同.

  • 您正在从字符串构造一个字符串 - 两者都是相同的,不能更改.重点是什么?只需使用原始字符串. (3认同)

Amy*_*y B 6

它是.NET,而不是C#.查看System.String的构造函数- none接受System.String

所以它是"非法的",原因与您无法使用int构造字符串相同.

string x = new String(1);
Run Code Online (Sandbox Code Playgroud)

雷蒙德陈

答案为"为什么不存在此功能?" 通常是"默认情况下功能不存在.有人必须实现它们."


我的猜测是每次有人坐下来实现这个构造函数.他们考虑了String.ToString的实现,并确定构造函数在逻辑上会破坏该方法.