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

时间:2013-05-03 18:10:44

标签: c# oop function parameter-passing

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

如何传递给方法

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

我仅限于.net 4.0框架。

3 个答案:

答案 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
    }