只有当一个值大于/小于当前值时,你才能赋值

本文关键字:赋值 小于 大于 一个 | 更新日期: 2023-09-27 18:01:20

我想知道是否有一个运算符来简化这个?类似于+=操作符

if (x > val) x = val;
x "new operator" val;

//date times
DateTime d1 = dsi_curr.cycleSteps.StepsUpTimestamp[0] ;
DateTime d2 = dsi_curr.cycleSteps.StepsUpTimestamp[dsi_curr.cycleSteps.StepsUpTimestamp.Length-1];
if (d1 < curbt.details.StartDate) {
    curbt.details.StartDate = d1;
}
if (d2 > curbt.details.EndDate) {
    curbt.details.EndDate = d2;
}

只有当一个值大于/小于当前值时,你才能赋值

没有内置的操作符,但是您可以添加自己的方法来简化:

static void MakeLesserOf(ref DateTime self, DateTime other) {
    self = self > other ? other : self;
}
static void MakeGreaterOf(ref DateTime self, DateTime other) {
    self = self < other ? other : self;
}

现在你可以重写你的代码如下:

MakeLesserOf(curbt.details.StartDate, d1);
MakeGreaterOf(curbt.details.EndDate, d2);

对于简单类型,可以使用Math.Min()Math.Max(),但不能使用DateTime。

它仍然会执行赋值,但会重新赋值较低/较高的值

如果您正在寻找如何简化条件表达式,您可以使用JleruOHeP在评论中提到的条件运算符(?:)。

curbt.details.StartDate = (d1 < curbt.details.StartDate) ? d1 : curbt.details.StartDate;
curbt.details.EndDate = (d2 > curbt.details.EndDate) ? d2 : curbt.details.EndDate;

虽然在这个特殊的情况下,我只写if没有换行符:

if (d1 < curbt.details.StartDate) curbt.details.StartDate = d1;
if (d2 > curbt.details.EndDate) curbt.details.EndDate = d2;

如果我误解了你的问题,请告诉我。