[英]How to return named tuples in C#?
我有一個屬性返回兩個DateTime
類型的項目。 返回這些值時,我必須將它們引用為Item1
和Item2
。 如何使用自定義名稱返回,例如
filter?.DateRanges.From
filter?.DateRanges.To
public Tuple<DateTime, DateTime> DateRanges
{
get
{
From = DateTime.Now.AddDays(-1).Date.AddMonths(-1);
To = DateTime.Now.AddDays(-1).Date;
if (Preset != 0)
{
if (Preset == DatePreset.SpecificRange)
{
From = From.Date;
To = To.Date;
}
else
{
var dateRange = DateTime.Today.AddDays(-1).GetDateRangeByPreset(Preset);
From = dateRange.From;
To = dateRange.To;
}
}
return new Tuple<DateTime, DateTime>(From, To);
}
用法:
var from = filter?.DateRanges.Item1;
var to = filter?.DateRanges.Item2;
像這樣:
public (DateTime Start, DateTime End) DateRanges
{
get
{
return (DateTime.MinValue, DateTime.MaxValue);
}
}
注意:這需要最新版本的C#和.Net。
順便提一下,請注意這種使用模式:
var from = filter?.DateRanges.Start;
var to = filter?.DateRanges.End;
這是低效的,因為它會導致創建兩個相同的元組。
這個更好:
var range = filter?.DateRanges;
if (range.HasValue)
{
var from = range.Value.Start;
var to = range.Value.End;
}
但請注意, 元組不能為空 (它們是值類型),因此您可以像這樣編寫它:
if (filter != null)
{
var range = filter.DateRanges;
var from = range.Start;
var to = range.End;
...
}
class Program
{
static void Main(string[] args)
{
test t = new test();
Console.WriteLine(t.NamedTuple.start);
Console.WriteLine(t.NamedTuple.stop);
Console.Read();
}
}
class test
{
DateTime From;
DateTime To;
public (DateTime start, DateTime stop) NamedTuple
{
get
{
From = DateTime.Now.AddDays(-1).Date.AddMonths(-1);
To = DateTime.Now.AddDays(-1).Date;
return (From, To);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.