提问人:Lanet Rino 提问时间:4/24/2023 最后编辑:Lanet Rino 更新时间:4/24/2023 访问量:60
给定一个对象形式的未知基元类型数组,将其转换为双数组 C#
Given an unknown primitive type array in the form of an object, convert it to double array C#
问:
我在这里搜索了以前的问题,但没有任何东西能完全回答我正在寻找的问题。
我正在使用 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 类有一些可能会有所帮助的帮助程序函数,但我无法理解如何适当地使用它们来解决这个问题。
谢谢
答:
2赞
Dmitry Bychenko
4/24/2023
#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赞
Lanet Rino
4/24/2023
谢谢,这解决了我的问题。我想我试图用艾哈迈德·阿拉亚特(Ahmed Alayat)建议的单一陈述使其尽可能精简,但即使这样也抛出了例外。
评论
double
ulong
float
double
INumber
double
Convert.ChangeType<double[]>(input)