只有当一个值大于/小于当前值时,你才能赋值
本文关键字:赋值 小于 大于 一个 | 更新日期: 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;
如果我误解了你的问题,请告诉我。