如何在 C# 中返回命名元组? [英] How to return named tuples in C#?
本文介绍了如何在 C# 中返回命名元组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个属性返回两个 DateTime
类型的项目.返回这些值时,我必须将它们引用为 Item1
和 Item2
.我如何使用自定义名称返回,例如
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);
}
用法:
var from = filter?.DateRanges.Item1;
var to = filter?.DateRanges.Item2;
推荐答案
像这样:
public (DateTime Start, DateTime End) DateRanges
{
get
{
return (DateTime.MinValue, DateTime.MaxValue);
}
}
注意:这需要最新版本的 C# 和 .Net.
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.
这样更好:
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;
...
}
这篇关于如何在 C# 中返回命名元组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文