簡體   English   中英

如何在C#中返回命名元組?

[英]How to return named tuples in C#?

我有一個屬性返回兩個DateTime類型的項目。 返回這些值時,我必須將它們引用為Item1Item2 如何使用自定義名稱返回,例如

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM