c# - 返回两个数字中较大数字的最简单方法是什么?

标签 c# linq collections comparison max

假设我有一个如下所示的实体:

public class Album()
{
    public DateTime LastUpdated { get; set; }
    public List<Picture> Pictures { get; set; }
}

我想做的是创建一个 LastActivity 属性,它将返回事件的最新日期。这对于 Pictures 集合来说非常简单:

public DateTime LastActivity
{
    get { return Pictures.Max(x => x.LastUpdated); }
}

但是,我还想考虑 Album 实体上的 LastUpdated 属性。我可以使用这段代码:

public DateTime LastActivity
{
    get { return Pictures.Max(x => x.LastUpdated) > this.LastUpdated
              ? Pictures.Max(x => x.LastUpdated)
              : this.LastUpdated) };
}

但这很糟糕,因为它会进行两次 Max() 转换。有没有更好的方法来编写这段代码?

回答

这是我根据公认的答案提出的解决方案:

public virtual DateTime LastActivity
{
    get
    {
        var max = Pictures.Any() ? Pictures.Max(x => x.LastUpdated) : DateTime.MinValue;
        return max > this.LastUpdated ? max : this.LastUpdated;
    }
}

需要注意的是,如果你对一个空集合执行 Max(),你会得到一个异常,所以你必须检查集合中是否有任何东西首先。

最佳答案

只需将最大值存储在一个变量中,而不是执行两次计算。

public DateTime LastActivity
{
    get 
    { 
        var max = Pictures.Max(x => x.LastUpdated);
        return max > this.LastUpdated
          ? max
          : this.LastUpdated 
    };
}

关于c# - 返回两个数字中较大数字的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318185/

相关文章:

c# - 我们在 C# 中有某种三重集合吗?

c# - EntityFramework ComplexType 引用 EntityType

指示 32 位或 64 位构建的 C# 指令

c# - 我如何连接两个具有相同基类的不同列表<T>?

c# - 使用 TimeSpan.Parse 的 QueryExtender Linq Orderby

c# - DataSet 选择子行包含 x 值的父行

c# - 使用介于两者之间的方法将 c# List 转移到另一个列表

javascript - 将详细信息按钮添加到动态 HTML 列表

c# - Linq 更新加入

c# - 可绑定(bind)的 LINQ 库或 "why Obtics is not actively maintained anymore"