在getter中声明变量

Sta*_*ked 4 c# getter

我有一个复杂的吸气剂如下

public bool IsOk
{
    get
    {
        return (IsFirstCondition && (IsSecondCondition.Items.First.Item == MyItems.PublicItems.BestItem
        || IsThirdCondition.Collection.EditedItem.IsTheMostUsedItem);
    }
}
Run Code Online (Sandbox Code Playgroud)

为了简单和更好的可读性,我想把我的getter变成这样的东西:

public bool IsOk
{
    get
    {
        var isBestItemm = IsSecondCondition.Items.First.Item == MyItems.PublicItems.BestItem;
        var isMostUsedItem = IsThirdCondition.Collection.EditedItem.IsTheMostUsedItem;

        return (IsFirstCondition && (isBestItemm || isMostUsedItem);
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,getter只是为了返回数据而不是为了设置/声明/初始化东西......我的简化getter是否对最佳实践和编码指南有效?

ang*_*son 6

首先,财产指南通常要求:

  1. 它们应该便宜

    尽量避免代价高昂的计算或从数据库和类似的东西中获取数据.

  2. 它们应该是一致的

    两次读取属性应该两次返回相同的值.

  3. 他们不应该引入副作用

    读取属性会以某种方式更改基础对象.

如果你能避免这种情况,可以使用任何正常的"技巧"来重构属性getter

  • 更具可读性
  • 更易于维护
  • 更可重用(或使用更多可重用的代码)

就你的实际例子而言,我肯定会声明这些变量.