【问题标题】:Initialize array of arrays初始化数组数组
【发布时间】:2013-07-22 14:23:15
【问题描述】:

我正在尝试制作一些测试数据来测试我的代码的某些功能。为此,我需要一个double[][]。我正在尝试使用将double[][] 作为输入参数并将包含测试数据的局部变量复制到其上的函数。但是,我收到了一个我不太理解的错误(我确定这是一个非常基本的错误,这就是我无法使用 Google 搜索它的原因),理解/修复,我将不胜感激。

private void makeData(double[][] patterns)
{
    double[][] data = new double[2][];
    // exists so that I can change `data` easily, without having to change the core functionality of copying it over to `patterns`
    data[0] = {1.0,8.0}; // error!
    // copy over everything from data into patterns
}

上面代码中标记的行给了我错误Only assignment, call, increment, decrement, and new objects can be used as a statement。对此,我的反应是“data[0] = {1.0,8.0}; 不是一个任务吗?

我很困惑,所以我很感激任何帮助

【问题讨论】:

  • 您使用的是二维数组,而您的第二条语句变成了一维数组
  • new double[]{,}(我认为数据类型是必需的)
  • @rajeem_cariazo:谢谢。这正是我需要的解释

标签: c# arrays initialization


【解决方案1】:

你想做的

data[0] = new[] {1.0, 8.0};

大括号初始值设定项仅在您创建对象/数组时有效。他们不能自己工作。

你可以具体指定类型:

data[0] = new double[] {1.0, 8.0};

但如果编译器可以推断出正确的类型(在您的情况下,它可以),则您不必这样做。

【讨论】:

    【解决方案2】:

    只需替换:

    data[0] = {1.0,8.0};
    

    作者:

    data[0] = new double[] { 1.0, 8.0 };
    

    编译器必须明确知道分配给data[0] 的内容。它不是从data[0] 的类型推断出来的。

    【讨论】:

    • 您实际上可以输入new[] {...},因为它可以从初始化程序的内容中推断出类型。
    • 我从不为数字这样做,因为它很容易被整数、浮点数、双精度数等迷失。并且类型是推断的,不是从 data[0] 的类型,而是从初始化器。
    • 是的,我说它会根据数组的内容来推断类型。请注意,如果它推断出错误的类型,那么它将无法编译;例如,如果内容的类型是 int 并将其设为 int[],那么将其分配给 double[] 时会出错,因此代码在上下文中将保持清晰。
    【解决方案3】:

    你应该先初始化你的子数组。

    double[][] data = new double[2][];
    data[0] = new double[] {1.0f, 8.0f};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 2012-12-03
      • 2012-02-15
      • 2019-11-02
      • 2016-01-19
      • 1970-01-01
      相关资源
      最近更新 更多