In C#,
Is there a way to turn an automatic property into a lazy loaded automatic property with a specified default value?
Essentially, I am trying to turn this…
private string _SomeVariable
public string SomeVariable
{
get
{
if(_SomeVariable == null)
{
_SomeVariable = SomeClass.IOnlyWantToCallYouOnce();
}
return _SomeVariable;
}
}
into something different, where I can specify the default and it handles the rest automatically…
[SetUsing(SomeClass.IOnlyWantToCallYouOnce())]
public string SomeVariable {get; private set;}
No there is not. Auto-implemented properties only function to implement the most basic of properties: backing field with getter and setter. It doesn’t support this type of customization.
However you can use the 4.0
Lazy<T>type to create this patternThis code will lazily calculate the value of
_someVariablethe first time theValueexpression is called. It will only be calculated once and will cache the value for future uses of theValueproperty