Оператор условия в C # 7 - PullRequest
0 голосов
/ 27 мая 2020

Я не хочу следовать стилю письма. указанное просто вне допустимого диапазона должно быть записано один раз

var a = 100;   // valid range 1..100_000 int32
var b = 10_000; // valid range 100..30_000_000 int32

if( a <= 1000)
{
    // avoid overflow
    if( b < a * 100)
    {
       // both out of range
    }
}
else if( b < 100_000)
{
    // both out of range
}

придумал следующий стиль, не подходит на первый взгляд ...

if( a <= 1000 ? b < a * 100 : b < 100_000)
{
    // both out of range
}

оператор switch? не хорошо ...

var lessEqual1000 = "a <= 1000";
var greater1000 = "a > 1000";
switch( a <= 1000 ? lessEqual1000 : greater1000)
{
case lessEqual1000 when b < a* 100:
case greater1000 when b < 100_000:
    // both out of range
}

что лучше?

========================= =============

Босс показал мне свой ответ. конечно, он выглядит лучше.

if( b < (a < 1000 ? a * 100 : 100_000))
{
    // both out of range
}

в дополнение к этому, без переполнения он должен следовать.

if( b < Math.Min( a * 100, 100_000))
{
  // both out of range
}

// following style hit upon me...
if( b < Math.Min(Math.BigMul(100, a), 100_000))
{
    // both out of range
}

где я могу написать хорошо стилизованный код в c#? ...

1 Ответ

0 голосов
/ 27 мая 2020

Думаю, вам может понадобиться что-то вроде этого, объединив две ветки в один оператор?

if ((a <= 1000 && b < a * 100) || (a > 1000 && b < 100_000)) {
  // Out of range branch
} else {
  // In range branch
}
...