【问题标题】:Resharper not allowing me to refactor a static method to an instance methodResharper 不允许我将静态方法重构为实例方法
【发布时间】:2013-06-22 02:44:40
【问题描述】:

我正在使用 ReSharper 将静态方法重构为实例方法,但 ReSharper 抛出错误:

方法没有合适的参数可以做成'this'

这是什么意思?这是我的类方法:

public static DateTime PreviousOrCurrentQuarterEnd(DateTime date)
{
    Quarter qrtr = GetQuarter(date);
    DateTime endOfQuarter = GetEndOfQuarter(date.Year, qrtr);
    if (endOfQuarter == date)
        return date;
    else
    {
        DateTime startOfLast = GetStartOfQuarter(date.Year, qrtr);
        return startOfLast.AddDays(-1);
    }
}

GetEndOfQuarter 和 GetStartOfQuarter 都是同一个类中的其他静态方法。

【问题讨论】:

  • 请张贴您在本课程中的所有代码。
  • 不,它没有说明行号或任何内容。它是一个弹出消息框,仅此而已。构造函数中没有参数,构造函数中没有参数,因为没有构造函数。

标签: c# unit-testing refactoring resharper resharper-7.1


【解决方案1】:

你不需要做任何特别的事情来使它成为一个实例方法。只需删除静态限定符即可。

Resharper 具有将以下静态方法转换为实例方法的功能:

public class MyClass {
    public static void DoSomething( MyClass thing, int value) {
        thing.Action (value) ;
   } 
} 

变成

public class MyClass {
    public void DoSomething( int value) {
        this.Action (value) ;
   } 
} 

注意从 'thing' 到 'this' 的变化。

【讨论】:

  • 好吧,我可以这样做,但是类中有 20 多个方法都是静态的。我认为 Resharper 有一种方法可以重构整个类以使其成为实例类?
  • @user1186050 你确定要这样做吗?如果一个方法可以是静态的,它通常应该是。在引入这样的状态之前,您应该仔细考虑。
  • 如果您查看Make Methods Non-Static,它会逐步说明如何执行此操作。在你做一两次之后,如果静态类被用在五个以上的地方,它不会花费你认为完全值得的时间。
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 2016-10-06
  • 2017-10-06
  • 2013-11-12
  • 2011-05-10
  • 1970-01-01
  • 2012-11-12
相关资源
最近更新 更多