我尝试将列表序列化为字符串,错误“'string'不包含带0参数的构造函数”
[Serializable]
class ComponentSerialization
{
public string komponent;
/**
* Konstruktor
*/
public ComponentSerialization(string v) {
ustawKomponent(v);
}
public void ustawKomponent(string v) {
this.komponent = v;
}
public string pobierzKomponent() {
string kom = new string();
kom = this.komponent;
return kom;
}
}
为什么不工作? :/
答案 0 :(得分:4)
string
没有默认构造函数(String Class - MSDN - 请参阅Constructors
部分 - 没有没有参数的构造函数)所以,你得到这个错误 - 你试着调用构造函数在String
课程中不存在。
不需要String
类中的默认构造函数。字符串是immutable
。这意味着在您尝试更改它之后创建一些字符串实际上您不会更改创建的字符串 - 您创建一个新字符串。
在您的情况下,您不需要构造函数 - 您不需要创建对象,只需指定引用。
改变这个:
string kom = new string();
kom = this.komponent;
到此:
string kom = this.komponent;
此外,您可以稍微重构一下代码。这些行:
string kom = new string();
kom = this.komponent;
return kom;
只能替换为一个:
return this.komponent;
答案 1 :(得分:2)
因为string
不可变。这意味着您永远不会更改string
实例的内容。
在这两行中
string kom = new string();
kom = this.komponent;
第一行的初始化是没用的。新实例(如果它将被创建)将立即抛出,因为您在下一行中分配this.komponent
。所以只需将其改为
string kom = this.komponent;
因此对无参数构造函数没有用处。如果您需要空字符串,请改用string.Empty
。
答案 2 :(得分:1)
替换
string kom = new string();
kom = this.komponent;
与
string kom = this.komponent;
string
类没有构造函数,因此您遇到此错误
答案 3 :(得分:0)
由于字符串是不可变的,因此没有参数的构造函数不会有任何意义。相反,如果您想声明一个没有任何值的字符串,则将其设置为null。 同样在你的情况下,函数pobierzKomponent是不必要的长。做这样的事情
public string pobierzKomponent()
{
return this.komponent
}
甚至更好,因为该字符串是公共的,将其声明为属性public string Komponent{get;set;}
并直接访问它而不使用任何getter函数