2017-04-06 125 views
-3

我想創建一個簡單的對象,將接受作爲屬性的字符串和數組。C#添加數組到對象

這是怎麼了,我想完成這件事:

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; } 
} 

但它返回:

Cannot initialize type 'ExcelSDRAddIn.UserControlSDR.Vars' with a collection initializer because it does not implement 'System.Collections.IEnumerable'

+0

名稱是字符串,並要指定集合字符串 – jjj

回答

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

+0

這甚至不會編譯('姓名'和'姓名') –

+0

@ J.Tuc是的,錯字。現在它會。 – Jurjen

+0

我終於明白了!謝謝。 – Valip

4

該錯誤確實有點誤導。但是,它指的是您的Name屬性,該屬性被聲明爲string。但是您使用集合初始化程序對其進行初始化。

另外,要初始化的屬性名稱需要與類中聲明的內容完全匹配。有一個套管問題。

你可能想要這個:

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; } 
} 

編輯:使用集合初始化程序假設您將對象添加到集合之前初始化集合實例地方。因此,在您Vars -class你需要設置name apropriately構造:

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

這將不會編譯,因爲'Vars'類中的名稱不對應於'new Vars'對象聲明中的名稱。 – Jurjen

+0

我在這裏添加了代碼http://rextester.com/IEQP33447,它返回'對象引用未設置爲對象的實例。「......任何想法有什麼不對? – Valip

+0

@Valip看我的編輯。 – HimBromBeere

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; } 
} 

請使用我的代碼段,這將解決您的問題。

+0

這將返回以下錯誤:'對象引用未設置爲對象的實例.' – Valip

+0

您可以在此處檢查代碼:http://rextester.com/IEQP33447 – Valip

+0

static void Main(string [] args) { 列表 variable = new列表(); (新Vars {id =「var1」,name =新字符串[] {「n1」,「n2」,「n3」,「n4」}}); Console.WriteLine(variable); Console.Read(); } public class Vars { public string id {get;組; } public string [] name {get;組; } } 請複製此片段。 –

0

名稱是一個字符串,你不能指定一個集合。這需要更改爲一個字符串列表。

因爲您正在使用屬性來構建對象,所以您需要提供一個字符串列表的新實例,以避免在嘗試最初在其他答案中提出的內容時發生空引用異常。

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; } 
    } 

可避免每次你在瓦爾的構造函數創建名稱的一個實例添加一個新的對象變量列表的時間來初始化名稱

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; } 
    }