假设我有一个如下所示的实体:
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/