我试图创建一个简单的对象,它将接受字符串和数组作为属性。
这就是我试图完成这项工作的方式:
public void addToObject()
{
List<Vars> variable = new List<Vars>();
variable.Add(new Vars { Id = "var1", Name = { "n1", "n2", "n3", "n4" } });
}
public class Vars
{
public string id { get; set; }
public string name { get; set; }
}
但它返回:
无法初始化类型&#39; ExcelSDRAddIn.UserControlSDR.Vars&#39;使用集合初始值设定项,因为它没有实现&#39; System.Collections.IEnumerable&#39;
答案 0 :(得分:4)
错误确实有点误导。但是它指的是您的Name
- 属性,它被声明为string
。但是您使用 collection-initializer 初始化它。
此外,要初始化的属性的名称需要与类中声明的内容完全匹配。存在套管问题。
你可能想要这个:
public void addToObject()
{
List<Vars> variable = new List<Vars>();
variable.Add(new Vars { id = "var1", name = { "n1", "n2", "n3", "n4" } });
}
public class Vars
{
public string id { get; set; }
public List<string> name { get; set; }
}
编辑:使用集合初始化程序假定您在将对象添加到集合之前在某处初始化集合 instance 。所以在你的Vars
- 类中,你需要一个能够恰当地设置name
的构造函数:
public class Vars
{
public string id { get; set; }
public List<string> name { get; set; }
public Vars() { this.name = new List<string>(); }
}
说完这个之后你甚至可以让你的name
- setter私有,所以来自课外的没有人可以设置列表引用,但只能将对象添加到列表中。
省略构造函数会导致NullReferenceException。这是因为集合初始化程序在内部更改为以下内容:
var v = new Vars();
v.id = "var1";
v.name.Add("n1");
v.name.Add("n2");
v.name.Add("n3");
v.name.Add("n4");
肯定会假定name
以任何方式初始化。
答案 1 :(得分:3)
您尝试将列表添加到字符串中。您想要的是List of strings
,您应该在Vars
课程中声明。
public void addToObject()
{
List<Vars> variable = new List<Vars>();
variable.Add(new Vars { Id = "var1", Names = new List<string>(){ "n1", "n2", "n3", "n4" } });
}
public class Vars
{
public string Id { get; set; }
public List<string> Names { get; set; }
}
运行代码here。
答案 2 :(得分:0)
在Vars类中,您希望将名称作为列表,而类型为字符串。这对你无济于事。
public void addToObject()
{
List<Vars> variable = new List<Vars>();
variable.Add(new Vars { id = "var1", name = new List<string> { "n1", "n2", "n3", "n4" } });
}
public class Vars
{
public string id { get; set; }
public List<string> name { get; set; }
}
请使用我的代码段,这样可以解决您的问题。
答案 3 :(得分:0)
名称是一个字符串,您无法为其分配集合。这需要更改为字符串列表。
因为您正在使用属性来构建对象,所以您需要提供字符串List的新实例,以避免在尝试其他答案中最初提出的内容时发生的空引用异常。
public void addToObject()
{
List<Vars> variable = new List<Vars>();
variable.Add(new Vars { Id = "var1", Names = new List<string>() { "n1", "n2", "n3", "n4" } });
}
public class Vars
{
public string Id { get; set; }
public List<string> Names { get; set; }
}
通过在Vars的构造函数中创建Names实例,每次向变量列表添加新对象时都可以避免必须初始化Name。
public void addToObject()
{
List<Vars> variable = new List<Vars>();
variable.Add(new Vars { Id = "var1", Names = { "n1", "n2", "n3", "n4" } });
}
public class Vars
{
public Vars()
{
this.Names = new List<string>();
}
public string Id { get; set; }
public List<string> Names { get; set; }
}