2010-12-01 130 views
5

我有一個結構(.NET 3.5):爲C#中的結構賦值一個值列表?

struct ColumnHeadings 
     { 
      public string Name ; 
      public int Width ; 
     } ; 

當我嘗試值的列表分配給結構,我收到了「不能隱式轉換類型字符串/ INT爲...」:

private void doSomething() 
{ 
    ColumnHeadings[,] ch = new ColumnHeadings[,]{{"column1",100}, 
       {"column2",100},{"column3",100}}; 
} 

結構值可以像多維數組一樣分配嗎?或者我需要使用?:

ch.Name = "column 1"; 

UPDATE分配的值:

由於馬克的極好的反饋正確的解決方法是:

結構:

struct ColumnHeadings 
     { 
      private readonly string name; 
      private readonly int width; 
      public string Name { get { return name; } } 
      public int Width { get { return width; } } 
      public ColumnHeadings(string name, int width) 
      { 
       this.name = name; 
       this.width = width; 
      } 
     } 

然後在該方法中:

var ch = new[]{new ColumnHeadings("column1",100), 
      new ColumnHeadings("column2",100), 
      new ColumnHeadings("column3",100)}; 

link爲什麼可變結構不是一個好主意。

+0

出於好奇,爲什麼是'ColumnHeadings`二維? – 2010-12-01 13:32:06

+0

@ C. Ross - 它的2D由於試圖混搭數組/結構體......) – 2010-12-01 13:34:27

回答

7

首先,這可能不應該是一個struct在所有

的語法爲:

ColumnHeadings[] ch = new ColumnHeadings[]{ 
    new ColumnHeadings{Name="column1",Width=100}, 
    new ColumnHeadings{Name="column2",Width=100} 
}; 

然而,除了你有公共領域的問題,而事實上,這是一個可變結構 - 兩者都是危險的。不完全是。

我想補充一個構造函數:

var ch = new []{ 
    new ColumnHeadings("column1", 100), 
    new ColumnHeadings("column2", 100) 
}; 

有:

struct ColumnHeadings 
{ 
    private readonly string name; 
    private readonly int width; 
    public string Name { get { return name; } } 
    public int Width { get { return width; } } 
    public ColumnHeadings(string name, int width) 
    { 
     this.name = name; 
     this.width = width; 
    } 
}