我需要将日期参数传递给可能具有不同日期的方法 例如,日期可能是expirydate或createddate?
如何传递给方法
void dosomething(?datetime whateverthedate)
{
// doawesomehere
}
我仅限于.net 4.0框架。
答案 0 :(得分:1)
您就是这样做的:
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()
提供一个虚拟方法,任何东西都可以调用而无需打开类型/枚举。
它还使不同日期的不同逻辑完全分开:
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();
}
答案 1 :(得分:0)
目前还不清楚你想要什么。
如果你想要一个可以对DateTime
做某事的功能,你可以这样做:
public DateTime AddThreeDays(DateTime date)
{
return DateTime.AddDays(3);
}
你会像以下一样使用它:
DateTime oldDate = DateTime.Today;
DateTime newDate = AddThreeDays(oldDate);
如果你想要一个对不同的DateTime
做不同的事情,根据它们代表什么,你应该把它分成不同的功能。
答案 2 :(得分:-2)
void dosomething(DateTime? dateVal, int datetype )
{
//datetype could be 1= expire , 2 = create , etc
// doawesomehere
}