我需要将日期参数传递给可能具有不同日期的方法,例如日期可能是过期日期或创建日期?
我如何传递给方法
void dosomething(?datetime whateverthedate)
{
// doawesomehere
}
我仅限于 .net 4.0 框架。
我需要将日期参数传递给可能具有不同日期的方法,例如日期可能是过期日期或创建日期?
我如何传递给方法
void dosomething(?datetime whateverthedate)
{
// doawesomehere
}
我仅限于 .net 4.0 框架。
这就是你的做法:
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)
...
但是等等,还有更多!
每当我看到这样的类型/枚举开关时,我都会想到“虚拟方法”。
因此,也许最好的方法是使用抽象基类来捕获共性,并拥有一个虚拟方法DoSomething()
,任何东西都可以调用而无需打开类型/枚举。
它还使不同类型日期的不同逻辑完全分开:
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();
}
非常不清楚你想要什么。
如果你想要一个对 a 做某事的函数DateTime
,那么你会这样做:
public DateTime AddThreeDays(DateTime date)
{
return DateTime.AddDays(3);
}
你会像这样使用它:
DateTime oldDate = DateTime.Today;
DateTime newDate = AddThreeDays(oldDate);
如果你想要一个会对不同的 s 做不同的事情DateTime
,这取决于它们代表什么,你应该把它分成不同的功能。
void dosomething(DateTime? dateVal, int datetype )
{
//datetype could be 1= expire , 2 = create , etc
// doawesomehere
}