C#, ”?”和“:”运算符
C#, "?" and ":" operators
我没有找到解决我问题的方法,所以我想问一下,当我有多个语句时,?
和 :
运算符如何工作?
我想做的是,中间有像素 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
(就像在第二个模式中一样)?
感谢您的任何建议!
我不是 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# 程序员)
我没有找到解决我问题的方法,所以我想问一下,当我有多个语句时,?
和 :
运算符如何工作?
我想做的是,中间有像素 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
(就像在第二个模式中一样)?
感谢您的任何建议!
我不是 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# 程序员)