c# - 第一次访问属性时的编码风格和支持字段成员为空

标签 c# coding-style readability

我正在寻找是否有优雅的方法来确保在第一次访问属性时设置关联的支持字段。例如,我最终使用以下代码范例来解决这个问题:

private Address _address;
        public Address Address
        {
            get
            {
                if (_address == null)
                {
                    _address = GetAddress();
                }return _address;
            }
        }  

最佳答案

除非容易出错或耗时,否则我建议在构造函数中填充属性。否则,我建议使用 Lazy<T> 这样做,为了线程安全:

public class MyClass
{
    private Address _address;

    public MyClass()
    {
        _address = GetAddress();
    }

    public Address Address {get {return _address;}}
}

使用 Lazy<T> :

public class MyClass
{
    private Lazy<Address> _address;

    public MyClass()
    {
        _address = new Lazy<Address>(() => GetAddress());
    }

    public Address Address {get {return _address.Value;}}
}

从 c#6 开始,你可以有一个像这样的自动实现的属性,但是你必须制作 GetAddress()方法 static :

public Address Addgress {get;} = GetAddress();

这将转化为类似于我展示的第一个选项 - See SharpLab demo.

关于c# - 第一次访问属性时的编码风格和支持字段成员为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49251821/

相关文章:

python - 更好的 assertEqual() 为 os.stat(myfile).st_mode

c# - C# 有办法实现 &&= 吗?

c# - 寻求有关在同一文件中工作的多个用户的设计建议

c# - 事件是创建指定委托(delegate)的实例还是只是一个约定?

coding-style - 如何在打开函数的大括号之前使 clang-format 添加新行?

java - 良好的软件实践 - 获取和设置方法

c# - 使用 count() 优化 linq 查询

c# 和 mongoDB - 无法从 BsonType Null 反序列化

java - 将成员函数放在成员变量之前或反之亦然的原因是什么?

python - 有没有办法使用可读性和 python 来提取文本,而不是 HTML?