C#中两个数据类型变量相互引用

易学习者

我有很长一段时间以来见过的最奇怪的错误。我在 Visual Studio 2017 中使用 C#,我必须使用似乎指向内存中同一点的数据变量。

具体来说,我定义了函数

static void GetDataMoments(IEnumerable<double> vec, out double M2X, out double M2Y, out double M2XY, out double M1Y, out double M1X, out int N)
{
    M2X = 0;
    M2Y = 0;
    M2XY = 0;
    M1Y = 0;
    M1X = 0;
    N = 0;

    foreach (var d in vec)
    {
        M1Y += d;
        M2X += (++N) * N;
        M2XY += d * N;
        M2Y += d * d;
        M1X += N; 
    }

    // For checking
    M1X = (N + 1d) * N / 2; 
}

这个函数有错误,所以我用

double[] vec = Enumerable.Range(1, 100).Select(i => (double)i).ToArray();

有了那个,在任何时候M1X都应该等于M1YM2X == M2Y == M2XY同样如此。

但是,在调试该函数时,在该foreach部分的第一行,我发现M1Y它增加了 d(1在这一点上相等),但也增加了M2Y!

有没有人遇到过这种情况?我在 .Net Framework 4.6.2 和 4.7.2 中都运行了它,所以它与框架无关。

谢谢!

拉塞诉卡尔森

造成这种情况的原因并不像 .NET 中的错误那样险恶或不幸,而只是您欺骗了自己。

请注意,我是通过一个假设来进行的,但是由于我可以使用这个假设来演示您遇到的确切问题,而且这是我能想到的唯一原因(除了实际的错误),我认为这样说是相当安全的这是你的问题。

问题不在于问题中的代码,而在于调用它的代码。

让我演示给你看:

public static void Test(out int a, out int b)
{
    a = b = 0;

    a++;
    Console.WriteLine(b);
}

您希望此代码输出 0,因为它增加了a,但不是b

但是,如果您这样称呼它:

int x;
Test(out x, out x);

您正在有效地制作a并且b都使用相同的变量,这使它们成为别名。

它会打印出来1

所以基本上你多次将相同的变量传递给你的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

声明中的两个或多个数据类型

来自分类Dev

声明中的两个或多个数据类型

来自分类Dev

C ++在函数声明中错误两个或多个数据类型

来自分类Dev

C ++在函数的声明中错误两个或多个数据类型

来自分类Dev

在C#中交换两个引用类型的变量

来自分类Dev

在 postgresql 中插入连接两个数据类型为串行的表

来自分类Dev

如何在haskell中声明两个包含相同变量的数据类型?

来自分类Dev

使用 SQL 中的变量交叉引用两个数据库

来自分类Dev

函数定义中声明说明符中的两个或多个数据类型

来自分类Dev

错误:声明说明符中的两个或多个数据类型uint32_t int;

来自分类Dev

如何知道C中未知类型变量的数据类型?

来自分类Dev

错误:声明说明符中有两个或多个数据类型

来自分类Dev

循环引用两个数据帧

来自分类Dev

相同数字数据类型的两个外键,并将其引用到两个表

来自分类Dev

询问变量C ++中的数据类型是什么

来自分类Dev

在C ++中定义变量:数据类型(值)

来自分类Dev

如何将这两个数据类型:“ RowF Maybe”和“ Maybe(RowF Identity)”放入同一列表中?

来自分类Dev

如何在R中相互减去两个数据帧

来自分类Dev

基于 R 中的两个变量和两个数据集替换值

来自分类Dev

在C ++中,有两个结构引用彼此的变量

来自分类Dev

ADA中变量的数据类型

来自分类Dev

如何在 BigQuery 中连接两个不同数据类型的数组?

来自分类Dev

在php / mysql中的同一查询中引用两个数据库表

来自分类Dev

合并两个不同数据类型的数组

来自分类Dev

两个LINQ查询返回不同的数据类型

来自分类Dev

表示两个函数等价的证明的数据类型

来自分类Dev

Python Pandas将两个数据集的两列转换为一个保留列名称和数据类型

来自分类Dev

如何在C ++中的两个单独的向量中保存两个数据集

来自分类Dev

子数据匹配另一个数据帧中的两个变量

Related 相关文章

  1. 1

    声明中的两个或多个数据类型

  2. 2

    声明中的两个或多个数据类型

  3. 3

    C ++在函数声明中错误两个或多个数据类型

  4. 4

    C ++在函数的声明中错误两个或多个数据类型

  5. 5

    在C#中交换两个引用类型的变量

  6. 6

    在 postgresql 中插入连接两个数据类型为串行的表

  7. 7

    如何在haskell中声明两个包含相同变量的数据类型?

  8. 8

    使用 SQL 中的变量交叉引用两个数据库

  9. 9

    函数定义中声明说明符中的两个或多个数据类型

  10. 10

    错误:声明说明符中的两个或多个数据类型uint32_t int;

  11. 11

    如何知道C中未知类型变量的数据类型?

  12. 12

    错误:声明说明符中有两个或多个数据类型

  13. 13

    循环引用两个数据帧

  14. 14

    相同数字数据类型的两个外键,并将其引用到两个表

  15. 15

    询问变量C ++中的数据类型是什么

  16. 16

    在C ++中定义变量:数据类型(值)

  17. 17

    如何将这两个数据类型:“ RowF Maybe”和“ Maybe(RowF Identity)”放入同一列表中?

  18. 18

    如何在R中相互减去两个数据帧

  19. 19

    基于 R 中的两个变量和两个数据集替换值

  20. 20

    在C ++中,有两个结构引用彼此的变量

  21. 21

    ADA中变量的数据类型

  22. 22

    如何在 BigQuery 中连接两个不同数据类型的数组?

  23. 23

    在php / mysql中的同一查询中引用两个数据库表

  24. 24

    合并两个不同数据类型的数组

  25. 25

    两个LINQ查询返回不同的数据类型

  26. 26

    表示两个函数等价的证明的数据类型

  27. 27

    Python Pandas将两个数据集的两列转换为一个保留列名称和数据类型

  28. 28

    如何在C ++中的两个单独的向量中保存两个数据集

  29. 29

    子数据匹配另一个数据帧中的两个变量

热门标签

归档