有人可以向我解释这两个字符串变量之间的区别:
dynamic dateStrAsDynamic = "12/10/2013";
var dateStrFromDynamic = dateStrAsDynamic.ToString();
var regularDateStr = "12/10/2013";
这两个行为方式完全相同但是在第一个调用时调用DateTime.Parse
告诉我在调试时不支持这个动态操作,我的意思是“动态操作是什么?”,无论动态操作是什么;它一定没有结束吗?
通过在{2}上调用DateTime.Parse
生成的IL代码(当然在ToString
被调用并分配给dateStrFromDynamic之后)也有很大差异,我无法完全掌握。
这两个真的有区别,还是我错过了什么?
答案 0 :(得分:8)
我的意思是“哪个动态操作?”
使用动态变量作为参数调用方法的那个。
请注意,dateStrFromDynamic
类型仍为dynamic
- 编译器不知道ToString()
肯定会返回string
。几乎所有动态操作的结果都是另一个动态值 - 如果您想告诉编译器您希望dateStrFromDynamic
的类型为string
,则需要明确说明:
string dateStrFromDynamic = dateStrAsDynamic.ToString();
或者只是:
string dateStrFromDynamic = dateStrAsDynamic;
(假设 一个字符串开头)。
是的, 在dateStrFromDynamic
和regularDateStr
之间存在巨大差异 - 如果您将鼠标悬停在Visual Studio中的var
上,它将变得更加明显因为它会告诉你编译器为每个变量推断出的类型。