C# 当涉及动态时,为什么类型转换(ChangeType、ToString、as)中存在不一致性?

C# 当涉及动态时,为什么类型转换(ChangeType、ToString、as)中存在不一致性?,c#,nancy,C#,Nancy,我有一个方法,我最终设法满足我的需要: protected bool TryChangeType(dynamic form) { try { Console.WriteLine(form.changeType); // "true" // string type = form.changeType as string; // #1 // string type = Convert.ToString(form.changeType);

我有一个方法,我最终设法满足我的需要:

protected bool TryChangeType(dynamic form)
{
    try
    {
        Console.WriteLine(form.changeType); // "true"
        // string type = form.changeType as string; // #1
        // string type = Convert.ToString(form.changeType); // #2
        string type = Convert.ChangeType(form.changeType, typeof(String)); // #3

        return type.ToLower() == "true";
    }
    catch (Exception e)
    {
        return false;
    }
}
首先,我从form.changeType开始,作为字符串1-无效,NullReferenceException

然后,我尝试了Convert.ToString 2-没有成功,RuntimeBinderException,ToStringbool和ToStringDateTime之间的调用不明确

在环顾四周之后,我发现了ChangeType——它起了作用

使现代化 表单变量的类型为:

而form.changeType是:


为什么会有这样的不一致,有什么区别?

什么类型是form.changeType?很明显,不是弦,也不是这样。阅读文档以了解其工作原理。你确定你在这里需要动力吗?你不能通过一个接口来完成吗?我怀疑这涉及到一个可为null的函数。但是,来吧,给我们一根骨头,form.changeType.GetType返回什么?我不认为这里可以包含Nullable:当您处理动态时,所有东西都是对象,具有特殊的编译器支持,但所有东西都是对象意味着所有东西都是装箱的,Nullable已经变得很简单了。但问题是什么无法从问题中确定,如果要得到好的答案,问题急需更新。请参阅更新,添加了类的链接。