2014-11-02 56 views
0

我有一個代表預定付款的對象。我的數據庫中有這些付款的清單,但我有一個付款實例。從函數返回2個值?

我需要編寫一個方法,獲得下一筆付款後,我有,以及以前的付款的前一個日期。

我想寫一個方法返回兩個日期。但是'DateTime'的返回類型只允許一個。我可以返回一個List<DateTime>,但這似乎很奇怪,可能會模糊。哪一個是前一個,哪一個是下一個?

我還可以創建具有DTO對象:

DateTime previousPayment {get; set;} 
DateTime nextPayment {get; set;} 

Tuple<DateTime, DateTime>可能是另一種選擇,但它也是模棱兩可。除非我能說出它的屬性?

但是 - 有沒有更好的方法來允許方法返回兩個日期?匿名類型或什麼?

+2

對於多回報,你可以將用戶類對象或泛型列表或數組 – 2014-11-02 04:59:31

+0

也期待在這個重複的問題:http://stackoverflow.com/q/748062/2557263 – Alejandro 2014-11-02 05:09:58

回答

1

爲什麼不簡單地返回一個類?

public class DateCombo { 
DateTime PreviousPayment {get; set;} 
DateTime NextPayment {get; set;} 

} 
+0

那是我在我的答覆中提到。可能是唯一的乾淨方式。 – Craig 2014-11-02 05:00:03

+0

儘管我仍然喜歡這個類,但Dictionary也可以使用。 – IKnowledge 2014-11-02 05:03:55

+0

我喜歡這個比Tuple 回答或'out'回答更好。也許我只是偏見而已,但是我發現'out'在C#內置插件中很少出現,因此它不適合。 – furkle 2014-11-02 05:09:05

1

除此之外,您還列出兩個選項,還有兩個:

  1. 返回Tuple<DateTime, DateTime>
  2. 使用out參數
+0

是的,我只是加了Tuple ...我可能是'出去'的事情是要走的路,因爲他們被命名了。 – Craig 2014-11-02 05:00:49

+1

Bur記住 - 不要使用Tuple作爲公共接口 - 而是用於內部/祕密。 – 2014-11-02 07:09:02

3

使用 「裁判」 修飾符。 (您可以使用「淘汰」,而是如果你不需要讀變量分配之前)

public void GetNextPayment(ref DateTime previousPayment, ref DateTime nextPayment){ 
    // do stuff here 
} 

用法:

DateTime previousPayment = DateTime.Now(); //Example 
DateTime nextPayment = DateTime.Now(); // example 
GetNextPayment(ref previousPayment, ref nextPayment); // Forgot to add "ref" when calling it 

previousPayment和nextPayment將在函數進行修改和維護值。

更新與字典

的Anik正如所提到的,它可能是更好地使用字典;

public Dictionary<string,DateTime> GetNextPayment(DateTime previousPayment, DateTime nextPayment){ 
    // modify payments 
    Dictionary<string,DateTime> myDict = new Dictionary(string, DateTime); 
    myDict.Add("PreviousPayment", [date]); 
    myDict.Add("NextPayment", [date]); 
    return myDict; 
} 

使用類

伊利亞。 N.提到要使用一個類。如果您將要使用多次的付款對象,我必須同意這一點。但我堅信最好給你提供所有可用的工具,因爲你永遠不知道什麼時候可能想要使用參數或字典。

public class Payment { 
    public string Name {get;set;} 
    public DateTime previousPayment {get;set;} 
    public DateTime nextPayment {get;set;} 

    public GetNextPayment(){ 
     // code to get the next payment 
     this.previousPayment = //whatever 
     this.nextPayment = //whatever 
    } 
} 

如果您只有一筆付款,您將像以前一樣使用。 (對於一個類的未來證明很好),那麼你可以使用方法或字典。

+1

對,out參數可以真正被認爲是通過引用。 C++ ftw! – Freestyle076 2014-11-02 05:07:13

0

試試這個......

private void Form1_Load(object sender, EventArgs e) 
    { 
     DateTime previousPayment =new DateTime(); 
     DateTime nextPayment=new DateTime(); 
     getdate(ref previousPayment, ref nextPayment); 
    } 
    public void getdate(ref DateTime previousPayment, ref DateTime nextPayment) 
    { 
     previousPayment = System.DateTime.Now; 
     nextPayment = System.DateTime.Now.AddDays(1); 

    }