C#, ”?”和“:”运算符

时间:2018-08-26 18:59:58

标签: c# image lockbits

我没有找到解决问题的方法,所以我问,?:运算符在有多个状态代理时如何工作?

我想做的是,我的像素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?为什么它无法识别像素,而每个像素都在private void PlusOne_Click(object sender, EventArgs e) { const int quantityColumn = 0; int increment = int.Parse(PlusOne.Text); foreach (ListViewItem list in listView1.SelectedItems) { int qty = 0; if (list.SubItems.Count != 0) { qty = int.Parse(list.SubItems[quantityColumn].Text); } list.SubItems[quantityColumn].Text = (qty + increment).ToString(); } } (如第二种模式)中?

感谢您的任何建议!

1 个答案:

答案 0 :(得分:1)

我不是C#专家,但是有一个通用规则如何? :可以使用运算符。

x = (boolean condition) ? reult_if_true : result_if_false;

例如

drink = isThisPersonAGirl ? wine : beer;

如果要对?使用很多条件? :运算符,您应该这样做:

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#编码器)