我在这里搜索了以前的问题,但没有什么能完全回答我正在寻找的问题。
我正在使用类型对象形式的 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 类有一些可能有用的辅助函数,但我无法理解如何适当地使用它们来解决这个问题。
谢谢
如果您只有
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[]
.
您必须先将您的值转换为两倍,您可以为此使用
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()));