Issue
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;
Solution
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;
...
}
ADDENDUM (2022):
Nowadays you can much more simply assign the values of a tuple to local variables. Now we can rewrite the last example above like so:
if (filter != null)
{
var (from, to) = filter.DateRanges;
...
}
Answered By - Matthew Watson Answer Checked By - Cary Denson (PHPFixing Admin)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.