任何人都可以向我解释为什么可以编译以下表达式:
dynamic dynValue = 42;
string strValue = "TestVal";
if(dynValue && strValue)
{
//Do something
}
我知道编译器基本上会忽略与动态有关的任何事情,但是它不应该为string
部分抛出错误吗?
答案 0 :(得分:3)
dynamic
的基本规则是:程序在运行时的行为与将dynamic
在编译时用对象的运行时类型替换的程序的行为相同。 / p>
由于有些类型在编译时允许x && someString
,所以如果知道x
的类型,那么x
的合法性必须是{{1 }}。
如果在运行时发现dynamic
不是允许x
使用字符串的类型,那么这将是运行时错误。
更一般而言: &&
关闭编译时类型的安全系统。您的问题是“为什么在关闭类型错误检测系统时没有出现类型错误?”当您这样问时,问题就会自动回答。如果您要输入类型错误,请不要关闭类型错误检测系统。