Resharper建议但不对此代码块执行任何重构

Imr*_*zvi 1 c# asp.net resharper

在下面的方法中,从不使用参数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);
}
Run Code Online (Sandbox Code Playgroud)

我在我的类文件中的许多地方使用此代码.

当我在我的代码上运行Resharper时,它会显示此消息,并且与其他所有其他建议不同,它无法更正此代码块

任何人都可以帮助我用良好的编码实践重写这个方法.

Ste*_*eve 9

将两个日期参数更改为 out

static void GetDatesFromMonth(string month, out DateTime fromDate, out DateTime toDate) 
Run Code Online (Sandbox Code Playgroud)

请参阅此处以了解out vs ref

简单地说,当你的方法需要返回两个或多个值时,你会使用out,out表示'我将在退出之前设置这个值'.相反,ref更复杂.这意味着'我需要在此方法中使用此值/对象,我将在退出之前更改它们'


Phi*_*hil 8

或者,因为输出参数通常是代码味道,您可能需要重写您的方法,如:

static Tuple<DateTime, DateTime> GetDatesFromMonth(string month)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么

static ToFromDates GetDatesFromMonth(string month)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

class ToFromDates
{
   public DateTime To{get;set;}
   public DateTime From{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

您还可以创建扩展方法

static class DateExtensions
{
    public static Tuple<DateTime, DateTime> GetDatesFromMonth(this string month)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

并在你的代码中使用它

var dates = "January".GetDatesFromMonth();
Run Code Online (Sandbox Code Playgroud)