2012-03-18 77 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