C#如何将反射获取的float/ulong/double数组转为double[]
解决方案
针对你通过反射获取的可能为double[]、float[]或ulong[]的数组对象,可通过类型判断结合Array.ConvertAll方法统一转换为double[],代码实现如下:
Type t = typeof(MyType); PropertyInfo pi = t.GetProperty("Property Name"); object primitiveTypeArray = pi.GetValue(myObject); double[] convertedArray; if (primitiveTypeArray is double[] doubleArr) { convertedArray = doubleArr; } else if (primitiveTypeArray is float[] floatArr) { convertedArray = Array.ConvertAll(floatArr, f => (double)f); } else if (primitiveTypeArray is ulong[] ulongArr) { convertedArray = Array.ConvertAll(ulongArr, u => (double)u); } else { throw new InvalidCastException("数组类型不在预期的double[]、float[]、ulong[]范围内"); }
关键说明
- 利用C#模式匹配(
is关键字)直接识别数组实际类型,比调用GetType()更简洁高效; Array.ConvertAll会自动创建新数组并完成元素转换:- float转double不会丢失精度;
- ulong转double时,数值小于2^53可精确表示,超过则存在精度损失,这是数值类型的固有特性;
- 若需兼容更多类型,可将元素转换逻辑替换为
Convert.ToDouble(),但针对已知的三种类型,直接强制转换性能更优。
内容的提问来源于stack exchange,提问作者Lanet Rino
相关产品推荐
相关产品推荐

