-1

如何为结构内的列表编写属性?

我的代码:

public struct Config
{
    List<int> ipAddress = new List<int>();
}
4

2 回答 2

5

如果您只想创建一个自动属性(默认null为引用类型并且无法初始化),您可以按照@scartag 的建议进行操作。

public struct Config
{
    // will default to null
    List<int> ipAddress {get; set;}
}

但是,如果您尝试执行代码中的操作并将其初始化为实际引用,则会遇到问题,因为您无法初始化struct. 他们只能有他们的默认值。更糟糕的是,您不能覆盖默认构造函数来为您执行此操作。

一般来说,struct对于小型的,最好是不可变的类型,往往是最好的。您是否有理由不想仅用class于此目的?

现在,如果您确实想创建一个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;
        }
    }
}

但实际上,在这种情况下,最好使用 a ,class因为您可以初始化字段,或覆盖默认构造函数:

public class Config
{
    public List<int> ipAddress {get; set;}

    public Config()
    {
        ipAddress = new List<int>();
    }
}

再一次,正如 Andrew 在评论中提到的,我强烈建议查看MSDN 指南,了解在structclass

于 2013-02-07T00:05:59.933 回答
2

见下文。

public struct Config
{
    List<int> ipAddress { get; set; }
}

或者,如果您不想使用自动获取/设置

public List<int> ipAddress 
{
    get
    {               
        return ipAddress?? new List<int>();
    }       
    set 
    {
        ipAddress = value;
    }
}
于 2013-02-06T23:55:43.850 回答