Getter方法中的Nullable Bool

时间:2016-09-07 15:51:28

标签: c#

团队正在详细讨论我们如何处理一个相当大的Account对象。

我们不希望必须初始化构造函数中的每个属性,因为这可能会导致过多的开销,因为该属性可能永远不会在该网页上使用。所以我们想出了以下内容。

public partial class Account
{
    private bool? projEcho;
    public bool ProjectEcho
    { 
        get
        {
            if (!projEcho.HasValue)
            {
                projEcho = isProjectEcho();
                return (bool)projEcho;
            }
            else 
            { 
                return (bool)projEcho; 
            }
        }
    }
}

这样,如果某人正在使用Account对象,并且需要访问该属性,则内部会发生setter。我们不是这种转换技术的忠实粉丝,但它是确保在代码运行时我们具有true / false值的唯一方法。看起来这种方法有问题,但它似乎是仅在我们需要时才填充属性的最有效方式。

我的问题是:“从开发标准的角度来看,是否有更好的替代方案来实现我们想要实现的目标?”

1 个答案:

答案 0 :(得分:1)

这个概念没什么问题 - 懒惰的初始化。

您将属性的支持字段保留为null,并在首次使用时为其指定值。 你不需要将可空的bool转换为bool,你可以使用Nullable.Value。

private bool? projEcho;
public bool ProjectEcho
    { get
        {
            if (!projEcho.HasValue)
                projEcho = isProjectEcho();
            return projEcho.Value; 
        }
    }

对我来说似乎更好。 .NET中还支持延迟初始化:

https://msdn.microsoft.com/en-us/library/dd997286(v=vs.110).aspx

但我个人并没有太多使用它。