簡體   English   中英

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# 編碼員)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM