You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:59:55