只有当值大于/小于当前值时才能分配值吗?

时间:2014-05-02 01:27:28

标签: c# operators

我想知道是否有运营商来简化这个? 与+ =运算符类似。

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;
}

3 个答案:

答案 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;

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