是否可以将以下内容简化为一行?

时间:2018-07-05 05:24:20

标签: c# initialization

很抱歉,我的头衔很差。我不知道正确的术语,但是如果您可以告知我我的实际要求,则会对其进行编辑。

是否可以像自动属性一样连续执行以下操作?

public class MyClass
{
    static OtherClass _otherClass;
    static OtherClass otherClass => _otherClass ?? (_otherClass = new OtherClass());
}

1 个答案:

答案 0 :(得分:0)

您可以使用Lazy<T>进行延迟初始化,尽管它不会简化太多代码:

static Lazy<OtherClass> _otherClassLazy = new Lazy<OtherClass>(() => new OtherClass());

static OtherClass otherClass => _otherClassLazy.Value;

Lazy<T>仅初始化一次值,并且仅在实际访问时初始化。

如果您真的想要一行,可以使用:

static Lazy<OtherClass> otherClass { get; } = new Lazy<OtherClass>(() => new OtherClass());

在代码中引用此变量时,必须付出otherClass.Value的代价。

如果只想按需初始化属性,而不是在类本身的初始化期间,则此解决方案比{ get; } = new OtherClass()更可取。如果构造函数要做很多工作并且在某些情况下可能不使用该属性,则这可能是理想的。