如何为结构内的列表编写属性?
我的代码:
public struct Config
{
List<int> ipAddress = new List<int>();
}
答案 0 :(得分:4)
如果你想要的只是创建一个自动属性(对于引用类型默认为null
而无法初始化),你可以像@scartag建议那样。
public struct Config
{
// will default to null
List<int> ipAddress {get; set;}
}
但是,如果您尝试执行代码中的操作并将其初始化为实际引用,则会遇到问题,因为您无法初始化struct
中的字段。他们只能有默认值。更糟糕的是,您无法覆盖默认构造函数来为您执行此操作。
一般来说,struct
往往最适合小型,最好是不可变类型。您是否有理由不想仅使用class
?
现在,如果你 想要创建一个带有“initialized”字段的struct
,你可以用一些懒惰的逻辑来欺骗它:
public struct Config
{
private List<int> _ipAddress;
private bool _isAssigned;
public List<int>
{
get
{
if (!_isAssigned)
_ipAddress = new List<int>;
return _ipAddress;
}
set
{
_ipAddress = value;
_isAssigned = true;
}
}
}
但实际上,按照这个速度,最好使用class
,因为可以初始化字段,或覆盖默认构造函数:
public class Config
{
public List<int> ipAddress {get; set;}
public Config()
{
ipAddress = new List<int>();
}
}
再次,正如安德鲁在评论中提到的,我强烈建议查看MSDN guidance on choosing between struct
and class
答案 1 :(得分:1)
见下文。
public struct Config
{
List<int> ipAddress { get; set; }
}
或者如果您不想使用自动获取/设置
public List<int> ipAddress
{
get
{
return ipAddress?? new List<int>();
}
set
{
ipAddress = value;
}
}