【发布时间】:2014-02-10 15:04:26
【问题描述】:
我有一个指向双精度数组的对象。 如何遍历数组以提取双精度数?
object data = new object()
func(ref data);
如果您在监视窗口中查看数据,它会显示...
data {double[123]}
【问题讨论】:
我有一个指向双精度数组的对象。 如何遍历数组以提取双精度数?
object data = new object()
func(ref data);
如果您在监视窗口中查看数据,它会显示...
data {double[123]}
【问题讨论】:
将对象转换为双精度数组:
double[] array = (double[])data;
然后您可以访问项目或遍历数组:
foreach(double value in array)
//...
【讨论】:
如果您知道它是一个可以转换为该类型的双精度数组:
double[] values = (double[])data;
如果data 的类型不是双精度数组,这将抛出InvalidCastException。
【讨论】:
你可以使用as操作符
double[] array = data as double[];
if(array != null)
{
..
}
它避免了InvalidCastException,如果data的类型不是double[]你的数组变成null。
【讨论】:
如果您希望您的方法的调用者始终传递某种类型的可迭代数据,并且该方法需要对其进行迭代,那么它不应该接受类型为object 的参数,它应该接受一个IEnumerable 类型的参数,或者可能具有某些特定类型的 IEnumerable<T>(例如 double)。
您应该不只接受object 并尝试投射它。这样做并没有正确地向方法的调用者表明他们需要传递一些可以迭代的东西。
还请注意,您可能不需要通过引用传递对象(使用 ref 关键字)。这仅对更改引用的对象有用。一般来说,这是不合适的。如果此方法生成了一个新对象,您可能希望返回它,而不是改变参数。
【讨论】: