2010-12-01 133 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; 
    } 
}