Mono说int是List<dynamic>。

4
我一直在努力将.NET代码转换为Mono。除了这部分之外,一切都运行良好:
如您所见,value是int。Mono表示int是List<dynamic>(请查看b的值)。然后if语句进入else if部分,然后在第129行抛出异常,因为int不能强制转换为List。在.NET中,else if部分被正确评估为false。有人能帮忙吗?
以下是可复制的代码:)
public static StringBuilder JsonValueToString(dynamic value, StringBuilder sb)
{
    if (value is JsonObject)
    {
        return value.BuildString(sb);
    }
    else if (value is List<dynamic>)
    {
        var xs = (List<dynamic>) value;
        sb.Append("[");
        for (int i = 0; i < xs.Count; ++i)
        {
            if (i > 0) sb.Append(", ");
            JsonValueToString(xs[i], sb);
        }
        sb.Append("]");
    }
    else
    {
        sb.Append(value.ToString());
        sb.Append(" ");
    }
    return sb;
}

//编辑:添加了一张更好的图片。

//编辑2:添加了一个代码片段。


1
出于兴趣,value as List<dynamic> 是否按预期工作? - Chris
1
@Filip,如果您在函数参数中将“dynamic value”替换为“object value”(同时保留“IList”),它是否有效? - Lucas Trzesniewski
1
好的,其实你本来就不需要使用 dynamic 来完成你想要做的事情... 我只是建议你用简单的类型转换来替代它。但我猜你刚刚发现了 Mono 的一个 bug,因为你最初的方法本应该可以直接运行。 - Lucas Trzesniewski
问题似乎又出在dynamic关键字上。 - Filip Vondrášek
1
升级到Mono 3.10解决了这个问题。 - Filip Vondrášek
显示剩余14条评论
1个回答

0
我之前使用的是Mono 3.2.8版本,升级到Mono 3.10版本后问题得到解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接