2012-03-18 79 views
1

在以下方法中,从DATE和toDate值的参数从不使用,因为它们在被读取之前会在主体中被覆盖。Resharper建议但不对此代码块执行任何重构

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的它显示了此消息,并与它的所有其他suggessions它是不能够纠正这种代码块

任何人可以帮助我重写此方法具有良好的编码习惯。

+0

**问ReSharper的错误\警告太多** – gdoron 2012-03-18 10:20:32

回答

8

改变两个日期参数out

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

See here了澄清了VS裁判

简单,你用了,当你的方法需要返回两个或多个值,该出来的意思是“我将在退出之前设置这个值。相反,裁判更加复杂。这意味着'我需要这个值/对象在这个方法里面,我会在退出前改变它们'

2

只需用out代替ref。它会显示你的意图(该参数将作为参数输出),并且还表明这些参数的初始值是无关紧要的。这也应该修复R#警告。如果您使用ref,则R#希望您在覆盖之前使用参数值。

8

或者因为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(); 
+0

感谢的方法 – 2012-03-18 11:06:30

+1

+1 - 为ToFromDates类型。 – 2012-03-18 11:07:40