为同一方法传递不同的日期值
本文关键字:日期 方法 | 更新日期: 2023-09-27 18:12:15
我需要将日期参数传递给可能具有不同日期的方法例如,日期可能是expiration date或createddate?
如何传递给方法
void dosomething(?datetime whateverthedate)
{
// doawesomehere
}
你应该这样做:
void DoSomethingWithExpiryDate(DateTime expiryDate)
{
...
}
void DoSomethingWithCreatedDate(DateTime createdDate)
{
...
}
我知道这看起来有点滑稽,但是你明白我的意思。
否则,请考虑将这两部分数据(日期和类型)封装到一个类中,并传递该类的一个实例:
enum DateItemKind
{
ExpiryDate,
CreatedDate
}
class DateItem
{
public DateTime DateTime { get; set; }
public DateItemKind Kind { get; set; }
}
void DoSomething(DateItem dateItem)
{
switch (dateItem.Kind)
...
但是等等,还有更多!
每当我看到类型/enum这样切换时,我就会想到"虚方法"。
因此,也许最好的方法是使用抽象基类来捕获共性,并为DoSomething()
提供一个虚拟方法,任何东西都可以调用该方法,而不必打开类型/enum。
它还使不同类型的日期的不同逻辑完全分开:
abstract class DateItem
{
public DateTime DateTime { get; set; }
public abstract virtual void DoSomething();
}
sealed class CreatedDate: DateItem
{
public override void DoSomething()
{
Console.WriteLine("Do something with CreatedDate");
}
}
sealed class ExpiryDate: DateItem
{
public override void DoSomething()
{
Console.WriteLine("Do something with ExpiryDate");
}
}
那么你可以直接使用DoSomething()
而不用担心类型:
void DoStuff(DateItem dateItem)
{
Console.WriteLine("Date = " + dateItem.DateTime);
dateItem.DoSomething();
}
你很不清楚你想要什么。
如果你想要一个函数,将做一些DateTime
,然后你这样做:
public DateTime AddThreeDays(DateTime date)
{
return DateTime.AddDays(3);
}
,你可以这样使用:
DateTime oldDate = DateTime.Today;
DateTime newDate = AddThreeDays(oldDate);
如果你想要一个对不同的DateTime
做不同的事情,取决于它们代表什么,你应该把它分成不同的函数。
void dosomething(DateTime? dateVal, int datetype )
{
//datetype could be 1= expire , 2 = create , etc
// doawesomehere
}