2013-05-03 2 views
-1

Мне нужно передать параметр даты методу, который может быть разных дат , например, дата может быть expirydate или createddate?Передача разных значений даты для того же метода

Как я перейти к методу

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

Я ограничен .NET 4.0 рамки.

+0

Очень непонятно, что вы ищет - вы уже можете передать любую дату, когда хотите использовать метод, который принимает значение DateTime в качестве аргумента ... –

ответ

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(); 
} 
-2
void dosomething(DateTime? dateVal, int datetype ) 
    { 
//datetype could be 1= expire , 2 = create , etc 
    // doawesomehere 
    } 
+4

Не используйте для этого магические ints. По крайней мере, используйте Enum, хотя я не уверен, что этот подход уместен. – Servy

+0

Кажется, что эту функцию следует переосмыслить и, мы надеемся, обобщить. – will

0

Очень неясно, чего вы хотите.

Если вы хотите функцию, которая будет делать что-то к DateTime, то вы могли бы сделать это следующим образом:

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

и вы бы использовать его как:

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

Если вы хотите, чтобы кто-то делал разные вещи в разных DateTime s, в зависимости от того, что они представляют, вы должны разделить его на разные функции.

Смежные вопросы