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

如何将NSNumber转换为.NET Object?未知类型场景该如何处理?

如何将未知类型的NSNumber转换为装箱的.NET Object?

在处理.NET iOS相关项目(如net6.0-ios、net6.0-maccatalyst、Xamarin、MAUI等)时,若你不知道NSNumber的具体类型,想要将其转换为装箱了实际.NET值类型(如bool、int、double等)的object,可以参考以下两种实现方式:

方式一:通过GetTypeCode()匹配转换

利用NSNumber的GetTypeCode()方法获取其对应的.NET类型码,再针对性转换为具体值类型,最终自动装箱为object:

public static object ConvertNSNumberToBoxedValue(NSNumber number)
{
    if (number == null)
        return null;
        
    var typeCode = number.GetTypeCode();
    return typeCode switch
    {
        TypeCode.Boolean => number.BooleanValue,
        TypeCode.Int16 => number.Int16Value,
        TypeCode.UInt16 => number.UInt16Value,
        TypeCode.Int32 => number.Int32Value,
        TypeCode.UInt32 => number.UInt32Value,
        TypeCode.Int64 => number.Int64Value,
        TypeCode.UInt64 => number.UInt64Value,
        TypeCode.Single => number.FloatValue,
        TypeCode.Double => number.DoubleValue,
        TypeCode.Byte => (byte)number.UInt8Value,
        _ => number.DoubleValue // 针对未覆盖的类型,默认回退为Double
    };
}

方式二:使用Convert.ChangeType()简化实现

借助.NET内置的Convert.ChangeType()方法,结合GetTypeCode()的结果自动完成类型转换:

public static object ConvertNSNumberToBoxedValue(NSNumber number)
{
    if (number == null)
        return null;
        
    var targetTypeCode = number.GetTypeCode();
    return Convert.ChangeType(number, targetTypeCode);
}

注意事项

  • NSNumber的GetTypeCode()会准确返回其内部存储值对应的.NET TypeCode,确保转换的精准性;
  • 若遇到一些边缘类型(比如罕见的数值类型),可以根据业务需求调整默认回退逻辑。

内容的提问来源于stack exchange,提问作者Matt Johnson-Pint

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:27:28