为同一方法传递不同的日期值

本文关键字:日期 方法 | 更新日期: 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
    }