Решарпер предлагает, но не выполняет рефакторинг для этого блока кода - PullRequest
1 голос
/ 18 марта 2012

В следующем методе параметры fromDate и значение toDate никогда не используются, потому что они перезаписываются в теле перед чтением.

static void GetDatesFromMonth(string month, ref DateTime fromDate, ref DateTime toDate)
{
  DateTime userDateTime = TimeHelper.getUserGMTNow();
  DateTime calculatedDate = Convert.ToDateTime(month + " 01," + userDateTime.Year);
  toDate = calculatedDate.AddMonths(1).AddSeconds(-1);
  fromDate = toDate.AddMonths(-12).AddSeconds(1);
}

Я использую этот код во многих местах в моем файле класса.

Когда я запускаю Resharper для своего кода, он показывает это сообщение и, в отличие от всех других предложений, он не может исправить этот блок кода

Может кто-нибудь помочь мне переписать этот метод с хорошей практикой кодирования.

Ответы [ 3 ]

9 голосов
/ 18 марта 2012

Измените два параметра даты на out

static void GetDatesFromMonth(string month, out DateTime fromDate, out DateTime toDate) 

См. Здесь для уточнения по сравнению с ref

Проще говоря, вы используете out, когда ваш метод должен вернуть два или более значений, out означает «Я установлю эти значения перед выходом». Наоборот, ссылка сложнее. Это означает «мне нужны эти значения / объекты внутри этого метода, и я изменю их перед выходом»

8 голосов
/ 18 марта 2012

В качестве альтернативы, поскольку параметры out обычно являются запахом кода, вы можете переписать свой метод следующим образом:

static Tuple<DateTime, DateTime> GetDatesFromMonth(string month)
{
    ...
}

или

static ToFromDates GetDatesFromMonth(string month)
{
    ...
}

с

class ToFromDates
{
   public DateTime To{get;set;}
   public DateTime From{get;set;}
}

Вы также можете создать метод расширения

static class DateExtensions
{
    public static Tuple<DateTime, DateTime> GetDatesFromMonth(this string month)
    {
        ...
    }
}

и использовать его в своем коде следующим образом

var dates = "January".GetDatesFromMonth();
2 голосов
/ 18 марта 2012

Просто используйте out вместо ref.Он покажет ваши намерения (что параметры будут вне параметров), а также укажет, что начальные значения этих параметров не имеют значения.Это также должно исправить предупреждение R #.Если вы используете ref, R # ожидает, что вы будете использовать значения параметров перед перезаписью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...