【发布时间】:2011-11-16 20:13:04
【问题描述】:
我有一个包含两个列表的struct:
struct MonthData
{
public List<DataRow> Frontline;
public List<DataRow> Leadership;
}
但是,我想在创建结构时初始化两者。如果我尝试:
struct MonthData
{
public List<DataRow> Frontline = new List<DataRow>();
public List<DataRow> Leadership = new List<DataRow>();
}
然后我得到:
Error 23 'MonthData.Frontline': cannot have instance field initializers in structs
...
由于结构不能有无参数构造函数,我也不能只在构造函数中设置它。到目前为止,我只能看到以下选项:
- 在创建 MonthData 实例时初始化这两个属性
- 使用类而不是结构
- 创建一个带参数的构造函数并使用它
- 为初始化它们的属性创建 getter 和 setter 懒洋洋的。
为此推荐的方法是什么?现在,我认为将其作为一门课程是最好的主意。
【问题讨论】:
-
让它成为一个类。一旦将引用类型添加到结构中,它就不再是值类型了。
-
将其设为引用类型(类)与值类型(结构)真的可以吗?如果是,请继续,让它成为一堂课。
-
是的,这种类型作为结构没有意义。
-
把它变成一个类会增加另一层间接性,如果它只包含两个类,最好将它作为值类型,因为每次通过某个地方时复制两个地址的开销很大多于一个间接
-
结构在语言中是有充分理由的。在很多情况下,它们是设计新类型时的合适选择。至少从表面上看,这似乎是其中之一。