有人可以向我解释这两个字符串变量之间的区别:
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代码也有很大差异,我无法完全掌握.
这两个真的有区别,还是我错过了什么?
我的意思是"哪个动态操作?"
使用动态变量作为参数调用方法的那个.
请注意,类型dateStrFromDynamic
仍然是dynamic
- 编译器不知道ToString()
肯定会返回一个string
.几乎所有的动态操作的结果也是一个动态的价值-如果你想告诉你想要的类型,编译器dateStrFromDynamic
是string
,你需要做的是明确的:
string dateStrFromDynamic = dateStrAsDynamic.ToString();
Run Code Online (Sandbox Code Playgroud)
要不就:
string dateStrFromDynamic = dateStrAsDynamic;
Run Code Online (Sandbox Code Playgroud)
(鉴于它真的是一个字符串开头).
所以,是的,有是之间有着巨大的区别dateStrFromDynamic
和regularDateStr
-如果你将鼠标悬停在var
Visual Studio中,它会变得更加明显,因为它会告诉你:编译器推断出每个变量的类型.