Velvet Star Monitor

Standout celebrity highlights with iconic style.

news

How to return named tuples in C#?

Writer Sebastian Wright

I have a property that returns two items of type DateTime. When returning these values I have to reference them as Item1 and Item2. How do I return with custom names e.g.

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); }

usage:

var from = filter?.DateRanges.Item1;
var to = filter?.DateRanges.Item2;
4

2 Answers

Like this:

public (DateTime Start, DateTime End) DateRanges
{ get { return (DateTime.MinValue, DateTime.MaxValue); }
}

Note: This requires a recent version of C# and .Net.

Incidentally, watch out for this usage pattern:

var from = filter?.DateRanges.Start;
var to = filter?.DateRanges.End;

That's inefficient because it causes two identical tuples to be created.

This is better:

var range = filter?.DateRanges;
if (range.HasValue)
{ var from = range.Value.Start; var to = range.Value.End;
}

However note that tuples cannot be null (they are value types) so you could write it like so:

if (filter != null)
{ var range = filter.DateRanges; var from = range.Start; var to = range.End; ...
}
5
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); } }
}

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy