在C#中为结构分配值列表?

时间:2010-12-01 13:28:57

标签: c# .net-3.5 struct multidimensional-array

我有一个结构(.NET 3.5):

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

当我尝试为该结构分配值列表时,我得到一个'无法隐式转换类型string / int到...':

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

可以以与多维数组相同的方式分配struct值吗?或者我需要使用?:

分配值
ch.Name = "column 1";

更新

感谢Marc的出色反馈,正确的解决方案是:

STRUCT:

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为什么可变结构不是一个好主意。

1 个答案:

答案 0 :(得分: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;
    }
}