【问题标题】:Resharper Refactor field of type T to Lazy<T>Resharper 将类型 T 的字段重构为 Lazy<T>
【发布时间】:2014-06-13 04:11:50
【问题描述】:

是否有一种简单的方法可以将 T 类型的字段/属性重构为 Lazy,并将该字段的所有用法替换为使用 FieldName.Value?

我有一个控制器,其中包含一堆存储在私有支持字段中的依赖项,但在任何给定的函数调用中只需要一些依赖项。为了加快这个控制器的构建,我想让所有的依赖都变得懒惰,但这只是一个令人讨厌的手工工作量。有什么建议吗?

【问题讨论】:

  • 我认为最简单的方法是,如果它是一个字段,则重构为一个属性。然后,在 getter 中,将支持字段更改为 Lazy&lt;T&gt; 并在该 getter 中返回它的 Value 属性。即没有针对此的特定重构。

标签: c# resharper resharper-8.0


【解决方案1】:

如果你以前有过,

public class LazyClass
{
 // initialized in constructor etc.
 public MyType MyTypeProperty { get; set; }
}

然后你可以让它延迟加载,而不影响调用者如下:

public class LazyClass
{
 private Lazy<MyType> myType = new Lazy<MyType>(() => new MyType());

 public MyType MyTypeProperty
 {
  get { return this.myType.Value; }
 }
}

我怀疑 Resharper 是否内置了这种重构。无论如何,您不希望所有调用者都知道它是 Lazy 并将其称为 LazyType.Value。不要暴露 Lazy 类型。

【讨论】:

  • 澄清一下,我要更改的字段是类私有的,所以我认为让它们纯粹是 Lazy's 而不是由属性访问器包装的很好。如果我有外部属性,我绝对会使用这种方法。
【解决方案2】:
  1. Tools > Create GUID

  2. Resharper > Refactor > Rename

    Foo => Foo_299E4ADB-5770-458C-B030-E40E19B0FFAF

  3. Edit > Find and Replace > Replace in Files

    _299E4ADB-5770-458C-B030-E40E19B0FFAF => .Value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多