【问题标题】:TimeSpan function usage C# [closed]TimeSpan 函数用法 C# [关闭]
【发布时间】:2021-05-31 13:36:39
【问题描述】:

如何将 int 1 和 120 替换为 TimeSpan?

public class StatisticsTask
{
    public static double GetMedianTimePerSlide(List<VisitRecord> visits, SlideType slideType)
    {
        var times = visits
            .GroupBy(x => x.UserId)
            .SelectMany(x => x.OrderBy(t => t.DateTime).Bigrams().Where(y => y.Item1.SlideType == slideType))
            .Select(x => x.Item2.DateTime - x.Item1.DateTime)
            .Where(x => x.TotalMinutes >= 1 && x.TotalMinutes <= 120)
            .Select(x => x.TotalMinutes)
            .ToList();

        if (times.Count == 0)
            return 0;

        return times.Median();
    }
}

【问题讨论】:

  • 为什么要使用 TimeSpan 而不是 1 和 120?你从某个地方得到 TimeSpan 吗?您究竟想达到什么目的?从技术上讲,您可以使用x &gt;= new TimeSpan(0, 1, 0) &amp;&amp; x &lt;= new TimeSpan(2, 0, 0),但为什么呢?
  • 我认为可能对TimeSpan 有误解。
  • 但无论如何:.Where(x =&gt; x &gt;= TimeSpan.FromMinutes(1) &amp;&amp; x &lt;= TimeSpan.FromMinutes(120)) 但这真的能改善什么吗?
  • 你知道你会错过例如30 秒?
  • 我假设您认为TimeSpan 是一种描述具有开始和结束的时间范围的类型。事实并非如此,TimeSpan 只是描述了持续时间。因此,您不能使用单个 TimeSpan 来指定 1 分钟到 120 分钟的范围。也许你应该看看this Time Period Library。

标签: c# timespan


【解决方案1】:

替换这个位

.Where(x => x.TotalMinutes >= 1 && x.TotalMinutes <= 120)

用这个位

.Where(x => x >= TimeSpan.FromMinutes(1) && x <= TimeSpan.FromMinutes(120))

这会在代码中为您提供所有 TimeSpan,但它会稍微扩展代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多