Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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# 将类型double[][]转换为float_C#_Asp.net_.net - Fatal编程技术网

C# 将类型double[][]转换为float

C# 将类型double[][]转换为float,c#,asp.net,.net,C#,Asp.net,.net,我有一个函数签名,如: static public double[][] G2Sweep(int row1, int row2, double[][] mtx) { mtx = (float) mtx; } 但我需要将双[][]矩阵转换为浮点值。由于代码不能显式地转换它,这是如何实现的?不,您不能将double转换为float-in-place,尤其是对于数组。您需要创建具有正确类型的副本 是的,所有的值都是浮动的,但我不想做for循环来遍历所有的值 对不起,你不能。将数组强制转换为f

我有一个函数签名,如:

static public double[][] G2Sweep(int row1, int row2, double[][] mtx)
{
    mtx = (float) mtx;
}

但我需要将双[][]矩阵转换为浮点值。由于代码不能显式地转换它,这是如何实现的?

不,您不能将double转换为float-in-place,尤其是对于数组。您需要创建具有正确类型的副本


是的,所有的值都是浮动的,但我不想做for循环来遍历所有的值

对不起,你不能。将数组强制转换为
float
(或
int
,或
String
,或
MonkeyPoo
,或其他类型)没有意义。如果需要查看数组中的每个值,则需要一个循环。无法回避这个事实


Lamdas和诸如此类的东西也可以归结为一个循环。你只需要咬紧牙关,或者A)在循环中转换(或者使用类似
.Cast
),或者使用正确的类型作为开始。

如果使用Linq,可以避免手动编写循环

public static float[][] Convert(double[][] mtx)
{
    var floatMtx = new float[mtx.Length][];
    for (int i = 0; i < mtx.Length; i++)
    {
        floatMtx[i] = new float[mtx[i].Length];
        for (int j = 0; j < mtx[i].Length; j++)
            floatMtx[i][j] = (float)mtx[i][j];
    }
    return floatMtx;
}
float[][] floats = mtx.Select(r=>r.Select(Convert.ToSingle).ToArray()).ToArray();
编辑:已修复。

确实,您无法就地转换,必须循环使用这些值

然而,现在可以公平地说,内存很便宜

在创建双[]变量时;为什么不同时简单地创建一个float[][],这样转换就在原地完成了

这样,在剩余的生命周期中,您就可以使用写入阵列执行写入任务

也就是说,您能否澄清为什么需要一个不同的浮点和双数组


*公平但不一定可以接受;如果它是一个在自己的盒子或虚拟图像上托管的网络应用程序;那就好了。如果这是一个独立的应用程序,可能需要在上网本或Silverlight的某个地方运行,那么这是不公平的。

另一种方法是使用Array.ConvertAll方法:

Array.ConvertAll<double, float>(doubles, d => (float)d);
Array.ConvertAll(double,d=>(float)d);

执行相同的循环和显式转换,但看起来更好。

是否要转换整个矩阵,保留尺寸标注?“是的,所有值都要浮动,但我更希望不必执行for循环来完成所有转换。请不要在标题前加上“C#”之类的前缀。这就是标签的用途。克里斯,你能告诉我们这个交错排列的阵列的细节吗,它能容纳多少,它是如何创建的;它将持有什么,难道它首先不只是一个浮点数吗;尽管第二个例子看起来更简单;在内部,它将执行相同的循环。当然,它更容易阅读和维护!“然而,现在可以公平地说内存很便宜。”-我的上网本上写着“嗨”。如果这个参差不齐的数组会相对较大,那么创建两个数组是一个糟糕的解决方案,如果有任何东西会否定这样做的必要性的话。我希望更多的东西能促进作品的创作。创作可能是一个比转换更好的地方;在我们知道它是什么之前,它是没有意义的!向你的上网本道歉:)是的,我们要做的就是把所有的东西从double改为float(我的代码中有554个实例),以节省处理能力
Array.ConvertAll<double, float>(doubles, d => (float)d);