我有一个结构(.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为什么可变结构不是一个好主意。
答案 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;
}
}