对动态类型变量的ToString调用在C#中表现不同



有人能向我解释一下这两个字符串变量之间的区别吗:

        dynamic dateStrAsDynamic = "12/10/2013";
        var dateStrFromDynamic = dateStrAsDynamic.ToString();
        var regularDateStr = "12/10/2013";

这两者的行为完全相同,但当调试第一个调用DateTime.Parse时,告诉我调试时不支持此动态操作,我的意思是"哪个动态操作?",无论是什么动态操作;一定没有结束吗?

通过对这两个调用DateTime.Parse生成的IL代码(当然,在ToString被调用并分配给dateStrFromDynamic之后)也有很大的差异,我无法完全理解。

这两个真的有区别吗,还是我错过了什么?

我的意思是"哪种动态操作?"

使用动态变量作为参数调用方法的方法。

请注意,类型dateStrFromDynamic仍然是dynamic——编译器不知道ToString()肯定会返回string。几乎任何动态操作的结果都是另一个动态值——如果你想告诉编译器你希望dateStrFromDynamic的类型是string,你需要明确:

string dateStrFromDynamic = dateStrAsDynamic.ToString();

或者只是:

string dateStrFromDynamic = dateStrAsDynamic;

(假设它真的一个字符串)。

因此,是的,dateStrFromDynamicregularDateStr之间有一个巨大的区别,如果你在Visual Studio中将鼠标悬停在var上,它会告诉你编译器为每个变量推断的类型,这一点会变得更加明显。

最新更新