Как упомянуто @ChaosPandion, в этом конкретном случае вы должны вернуть DateTime
struct.
Как правило, у вас есть следующие опции:
Использование out
параметров
Это простой способ, который обычно всегда работает. Однако это немного неуклюже, поскольку результат возвращается, когда вы обычно ожидаете, что аргументы функции будут переданы, а сигнатура метода может стать длинной и трудной для рефакторинга.
public void GetTime(out int hr, out int min)
{
DateTime dt = DateTime.Now;
hr = dt.Hour;
min = dt.Minute;
}
static void Main(string[] args)
{
// declare variables for out parameters first
int hour, minute;
GetTime(out hour, out minute);
}
Использование массива
Это простой метод, который хорошо работает, если возвращаемые значения имеют одинаковый тип.
public int[] GetTime()
{
DateTime dt = DateTime.Now;
return new[] { dt.Hour, dt.Minute};
}
Использование пакета свойств (Пакет свойств - это простой класс, обладающий только свойствами)
Это очень удобно и позволяет впоследствии легко изменять тип и количество возвращаемых значений без изменения сигнатуры метода.
class A
{
int Prop1 { get; set; }
int Prop2 { get; set; }
}
public A SomeMethod()
{
return new A() { Prop1 = 1, Prop2 = 2 }
}
Использование кортежа
В C # 4.0 (требуется VS 2010) вы можете использовать Tuple<T1, T2, ...>
класс:
public Tuple<int, int> GetTime()
{
DateTime dt = DateTime.Now;
return Tuple.Create(dt.Hour, dt.Minute);
}
C # 7.0 Кортежи
C # 7.0 добавляет поддержку нескольких возвращаемых значений. Вы можете написать такой код для возврата неявно созданного кортежа:
(string, string, string) LookupName(long id) // tuple return type
{
... // retrieve first, middle and last from data storage
return (first, middle, last); // tuple literal
}
Элементами кортежа являются имена Item1
, Item2
и т. Д. По умолчанию, но вы также можете указать имена, например,
(string first, string middle, string last) LookupName(long id) // tuple return type
{
... // retrieve first, middle and last from data storage
return (first, middle, last); // tuple literal
}
и затем получить доступ к элементам кортежа через эти имена:
var names = LookupName(id);
WriteLine($"found {names.first} {names.last}.");