【问题标题】:How to iterate through an object that is pointing to array of doubles?如何遍历指向双精度数组的对象?
【发布时间】:2014-02-10 15:04:26
【问题描述】:

我有一个指向双精度数组的对象。 如何遍历数组以提取双精度数?

object data = new object()
func(ref data);

如果您在监视窗口中查看数据,它会显示...

data {double[123]}

【问题讨论】:

    标签: c# arrays pointers


    【解决方案1】:

    将对象转换为双精度数组:

    double[] array = (double[])data;
    

    然后您可以访问项目或遍历数组:

    foreach(double value in array)
       //...
    

    【讨论】:

    • 大声笑,这么简单...谢谢。不知道你可以像这样投射一个数组。还有很多东西要学。
    • 嗯。我这样做了吗?如果我这样做了,我不是故意的。因为我是新来的,所以我能做的事情非常有限。我投了赞成票,这让我等待。我再次尝试投票,它说它需要 15 个声誉。所以我可能因为沮丧而意外投了反对票,我不是故意的。
    【解决方案2】:

    如果您知道它是一个可以转换为该类型的双精度数组:

    double[] values = (double[])data;
    

    如果data 的类型不是双精度数组,这将抛出InvalidCastException

    【讨论】:

      【解决方案3】:

      你可以使用as操作符

      double[] array = data as double[];
      if(array != null)
      {
         ..
      }
      

      它避免了InvalidCastException,如果data的类型不是double[]你的数组变成null

      【讨论】:

        【解决方案4】:

        如果您希望您的方法的调用者始终传递某种类型的可迭代数据,并且该方法需要对其进行迭代,那么它不应该接受类型为object 的参数,它应该接受一个IEnumerable 类型的参数,或者可能具有某些特定类型的 IEnumerable<T>(例如 double)。

        您应该只接受object 并尝试投射它。这样做并没有正确地向方法的调用者表明他们需要传递一些可以迭代的东西。

        还请注意,您可能不需要通过引用传递对象(使用 ref 关键字)。这仅对更改引用的对象有用。一般来说,这是不合适的。如果此方法生成了一个新对象,您可能希望返回它,而不是改变参数。

        【讨论】:

          猜你喜欢
          • 2021-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-27
          • 2022-11-17
          • 2012-04-15
          • 1970-01-01
          相关资源
          最近更新 更多