c# - 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# 编码器)
推荐阅读
- python - 在python中调度任务的执行
- python - 将 1D 列表转换为 2D DataFrame
- ios - 如果视图注册平移手势,则捏合手势不起作用
- json - Json 请求仅在我的计算机上工作(VB.Net 桌面应用程序。项目)
- android - 当活动不再可见时,活动的 onStop() 不会被调用
- javascript - 使用 useState() React.js 时的无限循环
- google-cloud-platform - 如何使用 terraform 在 gcp vm 中运行 bash 脚本
- php - 更改上传目录后不再显示 Wordpress 媒体文件
- python - 用 Python 替换一些带有特殊字符的 HTML 标签
- html - jQuery scrollTop 在移动设备上滚动折叠的导航栏