Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 离奇的分裂行为_C# - Fatal编程技术网

C# 离奇的分裂行为

C# 离奇的分裂行为,c#,C#,我知道,乍一看,这将得到重复提及。很可能是这样,但我想大多数人会认为答案与这个问题相似: 这不是我的情况。在这种情况下,将较小的数字除以较大的整数,得到0。这是有道理的。发生在我身上的事毫无意义 这是我的密码: decimal correctedImageWidth = screenWidth / maxColumnsWithMaxSizeImages; screenwidth的值是int,它是1024。MaxColumnSWithMaxSizeImage的值也是一个int,为3 不知何故,c

我知道,乍一看,这将得到重复提及。很可能是这样,但我想大多数人会认为答案与这个问题相似:

这不是我的情况。在这种情况下,将较小的数字除以较大的整数,得到0。这是有道理的。发生在我身上的事毫无意义

这是我的密码:

decimal correctedImageWidth = screenWidth / maxColumnsWithMaxSizeImages;
screenwidth的值是int,它是
1024
。MaxColumnSWithMaxSizeImage的值也是一个int,为
3

不知何故,
correctedImageWidth
变为0。这是奇数,因为1024/3不等于0,四舍五入的数字也不会是0,就像其他SO问题一样。你会认为我会得到类似于
341
的东西。以下是我所说的数字的证明:

正如您在我的
手表中看到的那样
screenWidth
为1024,
MaxColumnSwithMaxSizeImage
为3。但是,将这2划分为
correctedImageWidth
是0?有什么理由让我从中得到0吗?我已经向同样感到困惑的同事们展示了这一点。这是我的全部代码,也许我在做什么?不太可能,因为它们都是整数,并且都有有效的整数值。但很明显我一定在做什么?代码如下:

        int maxColumnsWithMaxSizeImages = (int)System.Math.Ceiling(decimal.Divide(1024, 480));
        if (maxColumnsWithMaxSizeImages < _minimumImagesPerRow)
        {
           .....
        } else if (maxColumnsWithMaxSizeImages > _maximumImagesPerRow)
        {
            ....
        } else
        {
            //between 2 and 4 columns
            var screenWidth = App.ScreenWidth;
            decimal correctedImageWidth = (decimal)((decimal)screenWidth / (decimal)maxColumnsWithMaxSizeImages);
            decimal test2 = 1024 / 3;
            decimal test3 = (decimal)1024 / (decimal)3;
            var test = correctedImageWidth;
        }
intmaxColumnsWithMaxSizeImages=(int)System.Math.天花板(decimal.Divide(1024480));
如果(maxColumnsWithMaxSizeImages<_MinimumImages如箭头所示)
{
.....
}else if(maxColumnsWithMaxSizeImages>\u MaximumImagesError)
{
....
}否则
{
//在2到4列之间
var screenWidth=App.screenWidth;
decimal correctedImageWidth=(十进制)((十进制)屏幕宽度/(十进制)maxColumnsWithMaxSizeImages);
十进制test2=1024/3;
十进制测试3=(十进制)1024/(十进制)3;
var测试=校正的图像宽度;
}
更新
出于某种原因,我的变量声明中似乎存在冲突。尽管我在不同的范围内声明了它们,但无论出于什么原因,这都会引发冲突。重命名变量后,我得到了正确的值

您已经定义了两次字段
correctedImageWidth
,一次是
int
(在
if
块中),一次是
decimal
(在
else
块中)


手表窗口的屏幕截图显示键入的
int
字段值,此时显示
0
(在
else
块中输入后未分配)。尝试查看
decimal
键入的字段,或者在调试时将鼠标悬停在另一个
decimal
键入的字段上,它应该会显示正确的值。

您已经定义了该字段
correctedImageWidth
两次,一次为
int
(在
if
块中),另一次为
decimal
(在
else
块中)


手表窗口的屏幕截图显示键入的
int
字段值,此时显示
0
(在
else
块中输入后未分配)。试着观察
decimal
键入的字段,或者在调试时将鼠标悬停在另一个
decimal
键入的字段上,它会显示正确的值。

对我来说,结果是
341
:A会让这个问题变得非常好。你尝试过重建吗?屏幕截图上还显示了
correctedImageWidth
是一个整数,而else语句则不是。我可以确认我得到了
341
的正确输出。您的结果,以及本地窗口中的一些粗略结果,使我认为这是Visual Studio的问题。请尝试重新启动并再次测试。在屏幕截图中的观察窗口中,
correctedmageWidth
int
。不是
decimal
int
。在代码屏幕截图的底部,黄色条所在的位置,有一个
correctedImageWidth
声明为十进制。在上面的块中,还有一个
correctedImageWidth
声明为
int
。有多少个变量和字段你有这个名字吗?是什么让你觉得你没有混淆哪个是哪个?对我来说,结果是
341
:A会让这个问题变得非常好。你尝试过重建吗?屏幕截图还显示
correctedImageWidth
是一个整数,而对于else语句来说不是这样。我可以确认我得到了正确输出
341
。您的结果以及本地窗口中的一些粗略结果使我认为这是Visual Studio的问题。请尝试重新启动并再次测试。在屏幕截图中的监视窗口中,
correctedImageWidth
int
。而不是
decimal
int
。位于您的代码屏幕截图,黄色条所在的位置,有一个声明为十进制的
correctedImageWidth
。在上面的块中,另一个
correctedImageWidth
声明为
int
。您有多少个变量和字段以该名称命名,是什么让您认为您不会混淆哪个是哪个?太好了分析,IMHO这是VS调试器的另一个错误。从停止代码的位置可以很清楚地看出,另一个
int
变量超出了范围,因此调试器不应该显示该变量,而应该显示在范围内的变量。@stakx是的,完全正确。原因已作为注释发布(两次),因为它只是一个猜测,作为一个answer@Sayse:猜测可能会转化为确定性。OP可以尝试将
int
变量重命名为另一个唯一的名称。如果这解决了问题,那么我们知道猜测是正确的。我还建议重新启动VS