给定一个对象形式的未知原始类型数组,将其转换为双精度数组 C#

问题描述 投票:0回答:2

我在这里搜索了以前的问题,但没有什么能完全回答我正在寻找的问题。

我正在使用类型对象形式的 PropertyInfo 通过反射检索原始类型数组。

    Type t = typeof(MyType);    
    PropertyInfo pi = t.GetProperty("Property Name");

    object primitiveTypeArray = pi.GetValue(myObject)

    double[] convertedArray = (double[])primitiveTypeArray; 

这个数组只有 3 种类型(目前),double,float 或 ulong。 convertedArray 的赋值仅在 primitiveTypeArray 对象包含 double[] 时有效,但如果它是 ulong[] 的 float[] 则失败。

我发现 Array 类和 Convert 类有一些可能有用的辅助函数,但我无法理解如何适当地使用它们来解决这个问题。

谢谢

c# arrays primitive-types
2个回答
1
投票

如果您只有

3
类型,为什么不检查所有这些可能性?

using System.Linq;

...

object primitiveTypeArray = pi.GetValue(myObject)

double[] convertedArray = 
    primitiveTypeArray is double[] da ? da
  : primitiveTypeArray is float[] fa ? fa.Select(item => (double) item).ToArray()
  : primitiveTypeArray is ulong[] ua ? ua.Select(item => (double) item).ToArray()
  : null; // or throw exception here

请注意,我们不能只将

float[]
转换为
double[]
,但可以创建所需的
double[]
.


0
投票

您必须先将您的值转换为两倍,您可以为此使用

foreach
或者简单的
LINQ
将为您完成这项工作。

Type t = typeof(MyType);  
PropertyInfo pi = t.GetProperty("Property Name");

object primitiveTypeArray = pi.GetValue(myObject)

double[] convertedArray = ((object[])primitiveTypeArray).Select(d => double.Parse(d.ToString()));
© www.soinside.com 2019 - 2024. All rights reserved.