为什么if(dynamic && string)会编译?

时间:2018-12-04 12:43:05

标签: c# dynamic

任何人都可以向我解释为什么可以编译以下表达式:

dynamic dynValue = 42;
string strValue = "TestVal";
if(dynValue && strValue)
{
    //Do something
}

我知道编译器基本上会忽略与动态有关的任何事情,但是它不应该为string部分抛出错误吗?

1 个答案:

答案 0 :(得分:3)

dynamic的基本规则是:程序在运行时的行为与将dynamic在编译时用对象的运行时类型替换的程序的行为相同。 / p>

由于有些类型在编译时允许x && someString,所以如果知道x的类型,那么x的合法性必须是{{1 }}。

如果在运行时发现dynamic不是允许x使用字符串的类型,那么这将是运行时错误。

更一般而言: &&关闭编译时类型的安全系统。您的问题是“为什么在关闭类型错误检测系统时没有出现类型错误?”当您这样问时,问题就会自动回答。如果您要输入类型错误,请不要关闭类型错误检测系统