这让我非常难过。也许我现在太累了。
Rectangle rectangle = new Rectangle(0, 0, image.Width, image.Height);
Rectangle cropArea = inputArea == null ? rectangle : inputArea.Value;
if (inputArea == null)
cropArea = rectangle;
inputArea是一个可以为null的Rectangle,在我的特定情况下为null。
前两个语句将cropArea初始化为0.然而,第二个语句根据图像宽度和高度生成正确的cropArea。我是否误解了条件运算符的任何内容?当inputArea = null时,它似乎不返回矩形?使用值类型时是否有任何怪癖?
编辑:好吧,我应该先试试这个:重启VS.似乎调试器骗了我,或者其他东西。无论如何,现在工作。感谢。答案 0 :(得分:1)
这似乎是Visual Studio调试模式中的一个令人讨厌的错误,它愚弄你:
现在 F10 跳过这一行,你得到:
在控制台上打印正确的值。
WTF。
答案 1 :(得分:0)
Rectangle cropArea = (!inputArea.HasValue) ? rectangle : inputArea.Value;
答案 2 :(得分:0)
您的代码显示正确无误。条件表达式(或条件运算符,或最初称为三元运算符 ...现在每个人都快乐?:))应该可以与if / else语句互换。
Rectangle cropArea = inputArea == null ? rectangle : inputArea.Value;
应与:
完全相同Rectangle cropArea;
if (inputArea == null)
{
cropArea = rectangle;
}
else
{
cropArea = inputArea.Value;
}
(实际上他们应该生成相同的IL代码)。
使用调试器进行跟踪,看看是否有任何事情发生。
答案 3 :(得分:0)
您是说当inputArea
为null
时,如果没有if
语句,您会将矩形初始化为图像大小以外的其他内容?我只是尝试运行它,它工作正常。确保image
的大小与inputArea
实际为null
。
答案 4 :(得分:-1)
到底是什么?
Rectangle rectangle = ...;
Rectangle cropArea;
if (inputArea == null)
cropArea = rectangle;
else
cropArea = inputArea.Value;
if (inputArea == null)
cropArea = rectangle;
为什么第二个if?这完全是多余的。 cropArea可能仍为null或为零的情况是inputArea.Value为null / 0,因为您没有检查(仅当inputArea为null)。