从一个函数返回2个值
本文关键字:函数 返回 2个值 一个 | 更新日期: 2023-09-27 18:28:50
我有一个表示计划付款的对象。我的数据库有这些付款的列表,但我有一个付款的实例。
我需要写一个方法,在我有一个之后获得下一次付款,以及上一次付款的前一个日期。
我想写一个返回这两个日期的方法。但是'DateTime
'的返回类型只允许一个。我可以返回一个List<DateTime>
,但这似乎很奇怪,而且可能不明确。哪个是上一个,哪个是下一个?
我还可以创建一个DTO对象,该对象具有:
DateTime previousPayment {get; set;}
DateTime nextPayment {get; set;}
Tuple<DateTime, DateTime>
可能是另一种选择,但它也不明确。除非我能说出它的属性?
但是,有没有更好的方法允许返回两个日期?匿名类型还是什么?
使用"ref"修饰符。(如果在分配变量之前不需要读取变量,则可以使用"out")
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
}
}
如果你只有一笔付款,你将一如既往地使用。(有利于类的未来验证),那么您可以使用方法或字典。
除了您列出的两个选项外,还有两个:
- 返回
Tuple<DateTime, DateTime>
- 使用
out
参数
为什么不简单地返回一个类?
public class DateCombo {
DateTime PreviousPayment {get; set;}
DateTime NextPayment {get; set;}
}
试试这个。。。
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);
}