【问题标题】:Is there a way to simplify repetitive getters?有没有办法简化重复的吸气剂?
【发布时间】:2020-09-30 14:05:23
【问题描述】:

我有一个包含许多变量的 c# 类,所有变量都初始化为 null。首次访问时,我想计算它们的值并将其返回(存储它以加快将来的访问)。为此,我编写了类似的代码

private T nullCheck<T>(T value, string how_to_compute) {
    if (value == null) {
        return compute(how_to_compute);
    }
    return value;
}

private string _variable1
public string variable1 {
    get { _variable1 = nullCheck(_variable1, "someData"); return _variable1; }
    set { _variable1 = value; }
}

...

每个变量的代码与variable1相似

有没有更好的方法来做到这一点?像自动创建这些几乎相同的 getter 和 setter 的自定义注解?

【问题讨论】:

  • 初始化属性不是更容易吗?您可以使用具有初始值的匿名属性:public string variable1 { get; set; } = "someData;"
  • 初始化属性可能需要做很多工作,所以我想卸载它直到有必要(通常​​大多数属性被忽略)
  • string how_to_compute .. return compute(how_to_compute); - 这有点令人困惑。您如何从字符串中计算值?你如何在这里指定T
  • 我认为这是“因过早优化而死”的情况......除非您要创建数十万个该类的实例,否则属性初始化所消耗的资源可以忽略不计。每次访问属性时执行的检查都会消耗更多资源。

标签: c# getter-setter getter


【解决方案1】:

我建议这样做:

public string variable1
{
    get { _variable1 = _variable1 ?? compute("some_data"); return _variable1; }
    set { _variable1 = value; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2021-06-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多