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

如何使用object.GetType()将object对象转换为其原始数据类型

解决方案

你尝试的(object.GetType())object写法无法生效是因为C#的强制类型转换要求转换目标类型在编译期就必须确定,不能用运行时才能获取到的Type实例作为转换目标。

针对你当前遇到的枚举值需要转底层数值的场景,只需要在处理非字符串值时,先判断值是否为枚举类型,是的话先转换为其对应的底层数值即可,修改后的代码如下:

static string QueryCosmos(Dictionary<string, object> parameters)
{
    var sb = new StringBuilder($"SELECT * FROM c WHERE ");
    foreach (var p in parameters)
    {
        object processedValue = p.Value;
        // 枚举类型特殊处理,转成底层数值
        if (p.Value != null && p.Value.GetType().IsEnum)
        {
            processedValue = Convert.ChangeType(p.Value, Enum.GetUnderlyingType(p.Value.GetType()));
        }

        if (!(processedValue is string))
        {
            // 处理非字符串数据类型
            var value = processedValue == null ? "null" : processedValue.ToString().ToLower();
            sb.Append($"c.{p.Key} = {value} and ");
        }
        else
        {
            sb.Append($"c.{p.Key} = '{processedValue}' and ");
        }
    }
    return sb.ToString().Substring(0, sb.ToString().LastIndexOf(" and "));
}
  • 如果有其他自定义类型需要特殊处理,也可以参考枚举的处理逻辑,增加对应的类型判断分支即可
  • 直接拼接查询字符串存在注入风险,正式环境更推荐使用Cosmos DB原生的参数化查询能力,将参数值和查询语句分开传递,避免注入问题同时也不需要手动处理不同类型的序列化逻辑

内容的提问来源于stack exchange,提问作者chary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:09:02