-1

我需要将日期参数传递给可能具有不同日期的方法,例如日期可能是过期日期或创建日期?

我如何传递给方法

void dosomething(?datetime whateverthedate)
{
// doawesomehere
}

我仅限于 .net 4.0 框架。

4

3 回答 3

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)
    ...

但是等等,还有更多!

每当我看到这样的类型/枚举开关时,我都会想到“虚拟方法”。

因此,也许最好的方法是使用抽象基类来捕获共性,并拥有一个虚拟方法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();
}
于 2013-05-03T18:41:44.970 回答
0

非常不清楚你想要什么。

如果你想要一个对 a 做某事的函数DateTime,那么你会这样做:

 public DateTime AddThreeDays(DateTime date)
 {
     return DateTime.AddDays(3);
 }

你会像这样使用它:

 DateTime oldDate = DateTime.Today;
 DateTime newDate = AddThreeDays(oldDate);

如果你想要一个会对不同的 s 做不同的事情DateTime,这取决于它们代表什么,你应该把它分成不同的功能。

于 2013-05-03T18:41:01.783 回答
-2
    void dosomething(DateTime? dateVal, int datetype  )
    {
//datetype could be 1= expire , 2 = create  , etc 
    // doawesomehere
    }
于 2013-05-03T18:15:35.003 回答