我想知道是否有运营商来简化这个? 与+ =运算符类似。
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;
}
答案 0 :(得分:2)
此处没有内置运算符,但您可以添加自己的方法来简化此操作:
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);
答案 1 :(得分:0)
对于简单类型,您可以使用Math.Min()
和Math.Max()
,但不能使用DateTime。
它仍会进行分配,但会重新分配较低/较高的值。
答案 2 :(得分:0)
如果您正在寻找如何简化条件表达式,可以在评论中使用conditional operator (?:)中提到的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;
如果我误解了你的问题,请告诉我。