C# 延迟加载自动属性

标签 c# automatic-properties

在 C# 中,

有没有办法将自动属性变成具有指定默认值的延迟加载自动属性?

本质上,我是想把这个...

private string _SomeVariable

public string SomeVariable
{
     get
     {
          if(_SomeVariable == null)
          {
             _SomeVariable = SomeClass.IOnlyWantToCallYouOnce();
          }

          return _SomeVariable;
     }
}

变成不同的东西,我可以在其中指定默认值,它会自动处理其余部分...

[SetUsing(SomeClass.IOnlyWantToCallYouOnce())]
public string SomeVariable {get; private set;}

最佳答案

不,没有。自动实现的属性仅用于实现最基本的属性:带有 getter 和 setter 的支持字段。它不支持这种类型的自定义。

但是您可以使用 4.0 Lazy<T> 键入以创建此模式

private Lazy<string> _someVariable =new Lazy<string>(SomeClass.IOnlyWantToCallYouOnce);
public string SomeVariable => _someVariable.Value;

此代码将延迟计算 _someVariable 的值第一次Value表达式被调用。它只会计算一次,并将缓存值以供将来使用 Value属性

关于C# 延迟加载自动属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4036812/

相关文章:

c# - 使用 C# 中的 PUT 请求将内容写入 Azure 存储上的文件

vb.net - 如何在 VB 10 中编写私有(private)设置自动属性?

c# - 而不是错误,为什么编译器不将这两个文字提升为 long 类型?

c# - 克隆一个包含许多对象并列出的对象 C#

c# - 自定义 ConfigurationSection 中无法识别的元素异常

c# - 为什么在基类构造函数中设置时重写的 get-only 属性保持为 null?

c# - 正确处理自动属性的 C# 到 VB.Net 的转换实用程序?

c# - C# 自动属性何时初始化?

c# - 带有 int 值的 Swagger 枚举