我没有找到解决问题的方法,所以我问,?
和:
运算符在有多个状态代理时如何工作?
我想做的是,我的像素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();
}
}
(如第二种模式)中?
感谢您的任何建议!
答案 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#编码器)