C#, "?" и операторы ":"
Я не нашел решения для моей проблемы, поэтому я спрашиваю, как ?
а также :
операторы работают, когда у меня несколько государственных деятелей?
Что я хочу сделать, у меня есть пиксель в середине 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 ответ
Я не специалист по 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#)