微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – IList的默认getter

我正在开始构建一个C#应用程序,而且我的眼中有一点刺:

我的大多数类都有一堆属性,如下所示:

private IList<Address> _addresses;
private IList<Phone> _phones;

public virtual IList<Address> Addresses
{
    get
    {
        if (_addresses == null)
            _addresses = new List<Address>();
        return _addresses;
    }
    set { _addresses = value; }
}
public virtual IList<Phone> Phones
{
    get
    {
        if (_phones == null)
            _phones = new List<Phone>();
        return _phones;
    }
    set { _phones = value; }
}

我想知道,有没有办法在一个地方定义这种行为(具体来说,认的getter),并重用它?我应该以某种方式扩展IList吗?

就像我可以使用

public virtual string Temp { get; set; }

代替:

private string _temp;
public virtual string Temp
{
    get { return _temp; }
    set { _temp = value; }
}

解决方法

我会在等待C#6时创建一个静态辅助函数,这就是我在MVVM框架中的选择.我认为这是一个相当普遍的实现,可以添加更多的重载来处理极端情况.

public static class PropertyHelper
{
    public static T Get<T,U>(ref T backingField,U initialValue = null)
        where T : class
        where U : class,T,new()
    {
        initialValue = initialValue ?? new U();
        return backingField ?? (backingField = initialValue);
    }
}

public class MyClass
{
    private IList<int> myVar;

    public IList<int> MyProperty
    {
        get { return PropertyHelper.Get<IList<int>,List<int>>(ref myVar); }
        set { myVar = value; }
    }

    private IList<int> myVar2;

    public IList<int> MyProperty2
    {
        get { return PropertyHelper.Get(ref myVar2,new List<int>()); }
        set { myVar2 = value; }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐