C#将作为通用对象返回的数组转换为不同的基础类型

Met*_*l76 5 c# arrays dynamic object type-conversion

我有一个C#方法,它使用object通用容器来返回一个可以使用不同数据类型声明的数据数组.下面是这种方法的简化示例:

void GetChannelData(string name, out object data)
{
    // Depending on "name", the underlying type of  
    // "data" can be different: int[], byte[], float[]...
    // Below I simply return int[] for the sake of example
    int[] intArray = { 0, 1, 2, 3, 4, 5 };
    data = intArray;
}
Run Code Online (Sandbox Code Playgroud)

我需要转换所有返回的数组元素,double但到目前为止我找不到方法.理想情况下,我想执行以下操作:

object objArray;
GetChannelData("test", out objArray);
double[] doubleArray = Array.ConvertAll<objArray.GetType().GetElementType(), double>(objArray, item => (double)item);
Run Code Online (Sandbox Code Playgroud)

由于ConvertAll不接受在运行时定义的类型,因此失败了.我也尝试过将中间转换为dynamic变量,但无济于事.

有没有办法以简单的方式执行这种类型转换?

Ale*_*ese 4

如果您在编译时不知道类型,可以尝试对其进行转换。

var array = (IEnumerable)objArray;
var doubles = array.OfType<object>().Select(a => Convert.ToDouble(a)).ToArray();
Run Code Online (Sandbox Code Playgroud)