C# ';字符串';不包含接受0个参数的构造函数--为什么/

C# ';字符串';不包含接受0个参数的构造函数--为什么/,c#,unity3d,C#,Unity3d,我尝试将列表序列化为字符串,错误为“'string'不包含接受0个参数的构造函数” 为什么不工作/ 更换 string kom = new string(); kom = this.komponent; 与 string类没有构造函数,因此遇到此错误string没有默认构造函数(-请参阅Constructors部分-没有不带参数的构造函数),因此,出现此错误-尝试调用string类中不存在的构造函数 String类中的默认构造函数是不需要的。字符串是不可变的。这意味着在创建一些字符串之后,当您

我尝试将列表序列化为字符串,错误为“'string'不包含接受0个参数的构造函数”

为什么不工作/

更换

string kom = new string();
kom = this.komponent;


string
类没有构造函数,因此遇到此错误

string
没有默认构造函数(-请参阅
Constructors
部分-没有不带参数的构造函数),因此,出现此错误-尝试调用
string
类中不存在的构造函数

String
类中的默认构造函数是不需要的。字符串是不可变的。这意味着在创建一些字符串之后,当您试图更改它时,实际上您并没有更改创建的字符串,而是创建了一个新的字符串

在您的情况下,您不需要构造函数-您不创建对象,您只需分配引用

更改此项:

string kom = new string();
kom = this.komponent;
为此:

string kom = this.komponent;
此外,您还可以进一步重构代码。这些线路:

string kom = new string();
kom = this.komponent;
return kom;
只能替换为一个:

return this.komponent;

因为
字符串
不可变的。这意味着您永远不会更改
字符串
实例的内容

在这两行中

string kom = new string();
kom = this.komponent;
第一行中的初始化无效。新实例(如果要创建)将立即抛出,因为您在下一行中分配了
this.komponent
。所以只要把它改成

string kom = this.komponent;

因此,无参数构造函数没有任何用处。如果需要空字符串,请使用
string.empty

因为字符串是不可变的,所以没有参数的构造函数没有任何意义。相反,如果要声明一个没有任何值的字符串,请将其设置为null。 同样,在您的例子中,函数pobierzcomponent也不需要太长。就这样做吧

public string pobierzKomponent()
{
        return this.komponent
}

或者更好,因为该字符串是公共的,所以将其声明为属性
publicstringkomponent{get;set;}
并直接访问它,而不使用任何getter函数

,原因很明显:
string
没有接受0个参数的构造函数,这就是原因
newstring()
基本上会创建一个空字符串,只需使用
string.empty
。应该有一个“如何读取和理解Stacktraces”…我提到不变性的原因是为了回答为什么设计人员没有提供无参数构造函数的问题。没有任何有用的场景,因为您不会更改该实例的内容,并且已经“分配”了一个空字符串并存储在
string.empty
。是的,是的,删除了注释。我花了一段时间才明白你实际上是在回答“为什么没有无参数构造函数”,而不是“为什么我的代码不能编译”,这是我认为OP真正想问的。您的答案恐怕比OPs问题要快得多。“所以,如果它是默认构造函数,您将创建无法更改的“空的东西”。然后呢?空字符串在许多情况下仍然很有用。这不是
string()
不存在的真正原因。它的存在不仅仅是因为可重用性带来的效率:文本
将被插入
字符串中。空的
是一个可以无限次使用的单一实例。这与
ImmutableStack.Empty
的原理相同。在一个不变的世界里,你只需要一个空堆栈。@在这中间,谢谢,我编辑了我的答案
string kom = this.komponent;
public string pobierzKomponent()
{
        return this.komponent
}