在C#中对动态类型变量的ToString调用行为有所不同

时间:2013-12-05 19:51:52

标签: c# c#-4.0

有人可以向我解释这两个字符串变量之间的区别:

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

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

通过在{2}上调用DateTime.Parse生成的IL代码(当然在ToString被调用并分配给dateStrFromDynamic之后)也有很大差异,我无法完全掌握。

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

1 个答案:

答案 0 :(得分:8)

  

我的意思是“哪个动态操作?”

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

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

string dateStrFromDynamic = dateStrAsDynamic.ToString();

或者只是:

string dateStrFromDynamic = dateStrAsDynamic;

(假设 一个字符串开头)。

是的, dateStrFromDynamicregularDateStr之间存在巨大差异 - 如果您将鼠标悬停在Visual Studio中的var上,它将变得更加明显因为它会告诉你编译器为每个变量推断出的类型。