Это, как вы это делаете:
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();
}
Очень непонятно, что вы ищет - вы уже можете передать любую дату, когда хотите использовать метод, который принимает значение DateTime в качестве аргумента ... –