有人能向我解释一下这两个字符串变量之间的区别吗:
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;
(假设它真的是一个字符串)。
因此,是的,dateStrFromDynamic
和regularDateStr
之间有一个巨大的区别,如果你在Visual Studio中将鼠标悬停在var
上,它会告诉你编译器为每个变量推断的类型,这一点会变得更加明显。