C #, "?"и операторы ":" - PullRequest
       45

C #, "?"и операторы ":"

0 голосов
/ 26 августа 2018

Я не нашел решения для своей проблемы, поэтому я спрашиваю, как работают операторы ? и :, когда у меня несколько государственных операторов?

Что я хочу сделать, у меня пиксель в середине pixel[pos] и пикселей вокруг, это выглядит так:

0 0 0
0 x 0
0 0 0

x - это центральный пиксель.

Я проверяю, есть ли вокруг него белый (zero) пиксель.Если есть кто-то, я пометил пиксель как two.Если нет, то шаблон выглядит так:

1 1 1
1 x 1
1 1 1

1 - это черный пиксель, я установил его на one.

Теперь код:

if(pixels[positionOfPixel] == one && x > 0 && x < width 
                                  && y > 0 && y < height)
{
    pixels[positionOfPixel] = pixels[positionOfPixel - 1]          == zero ? two :
    pixels[positionOfPixel] = pixels[positionOfPixel + 1]          == zero ? two :
    pixels[positionOfPixel] = pixels[positionOfPixel - offset]     == zero ? two :
    pixels[positionOfPixel] = pixels[positionOfPixel + offset]     == zero ? two :
    pixels[positionOfPixel] = pixels[positionOfPixel - offset + 1] == zero ? two :
    pixels[positionOfPixel] = pixels[positionOfPixel + offset - 1] == zero ? two :
    pixels[positionOfPixel] = pixels[positionOfPixel - offset - 1] == zero ? two :
    pixels[positionOfPixel] = pixels[positionOfPixel - offset + 1] == zero ? two : zero;
}

Мой вопрос: почему каждый one пиксель помечен как two?Почему он не распознает пиксель, где каждый пиксель имеет значение one (как во втором шаблоне)?

Спасибо за любые советы!

1 Ответ

0 голосов
/ 26 августа 2018

Я не специалист по C #, но есть общее правило, как?: оператор может быть использован.

x = (boolean condition) ? reult_if_true : result_if_false;

Например,

drink = isThisPersonAGirl ? wine : beer;

Если вы хотите использовать много условий с?: operator, вы должны сделать это следующим образом:

x = (boolean condition 1) ? result_if_true : (boolean condition 2) ? result_if_bool_2_is_true : result_if false;

Например,

drink = isThisPersonAChild ? lemonade : isThisPersonAGitl ? wine : beer

В вашем фрагменте кода трудно понять, что происходит, потому что вы слишком часто используете оператор =.В большинстве языков вы можете инициализировать несколько переменных, например:

a = b = c = 0, поэтому a, b, c будет = 0;

Так что я думаю, что ваша ошибка заключается в использовании= оператор слишком часто, поэтому, возможно, имеет значение только это условие, в то время как другие просто пропускаются:

pixels[positionOfPixel - offset + 1] == zero ? two : zero;

Извините, это не помогает, так как я действительно не кодер C #)

...