2013-06-22 2 views
4

я использую ReSharper рефакторинга статического метода к методу экземпляра, но ReSharper бросает ошибку, которая говорит:Resharper не позволяет мне реорганизовать статический метод метод экземпляра

метод не имеет никакого подходящего параметр, который можно сделать в «это»

Что это значит? Вот мой метод класса:

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 другие статические методы внутри одного класса.

+0

Означает ли это, в какой строке он жалуется? Если вы сделаете этот метод нестационарным, то все, что его использует, будет необходимо создать экземпляр класса, в котором находится 'предыдущийOrCurrentQuarterEnd'. Существуют ли параметры в конструкторе? –

+0

Пожалуйста, разместите весь свой код для этого класса. –

+0

Нет, он ничего не говорит о номере линии или что-то еще. Это всплывающее окно сообщения, в котором все сказано. Нет никаких параметров в конструкторе, конструкторы не имеют параметров в конструкторе, потому что нет конструктора. – user1186050

ответ

4

Вам не нужно ничего делать, чтобы сделать это методом экземпляра. Просто удалите статический классификатор и сделайте это.

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) ; 
    } 
} 

Обратите внимание на переход от «вещь» на «это».

+0

Ну, я мог бы это сделать, но в классе есть все, что есть 20+ методов, которые все статичны. Я думал, что существует способ, которым Resharper мог бы реорганизовать весь класс, чтобы сделать его классом экземпляра? – user1186050

+0

@ user1186050 Вы уверены, что хотите это сделать? Если метод _can_ статичен, он обычно должен быть. Вы должны тщательно подумать, прежде чем вводить такое состояние. –

+0

Если вы выберете [Сделать методы нестатистическими] (https://buildbroke.com/refactoring/resharper/2015/04/15/make-methods-non-static.html), он имеет пошаговые инструкции, как это сделать это. После того, как вы это сделаете один или два раза, это не займет столько времени, сколько вы думаете, это стоит того, если статический класс используется более чем в пяти местах. – giltanis