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

mmg*_*666 3 c# c#-4.0

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

        dynamic dateStrAsDynamic = "12/10/2013";
        var dateStrFromDynamic = dateStrAsDynamic.ToString();
        var regularDateStr = "12/10/2013";
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jon*_*eet 8

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

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

请注意,类型dateStrFromDynamic仍然是dynamic- 编译器不知道ToString()肯定会返回一个string.几乎所有的动态操作的结果也是一个动态的价值-如果你想告诉你想要的类型,编译器dateStrFromDynamicstring,你需要做的是明确的:

string dateStrFromDynamic = dateStrAsDynamic.ToString();
Run Code Online (Sandbox Code Playgroud)

要不就:

string dateStrFromDynamic = dateStrAsDynamic;
Run Code Online (Sandbox Code Playgroud)

(鉴于它真的一个字符串开头).

所以,是的,有之间有着巨大的区别dateStrFromDynamicregularDateStr-如果你将鼠标悬停在varVisual Studio中,它会变得更加明显,因为它会告诉你:编译器推断出每个变量的类型.