简单代码:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Add
</button>
<div id="contain">
</div>
上面的代码编译时没有错误,并在运行时执行异常:class Program
{
static void Main(string[] args)
{
dynamic income = "test";
var result = Test(income); // Why dynamic?
Test2(result); // WTF?
}
static string Test(string income)
{
return income;
}
static string Test2(int income)
{
return income.ToString();
}
}
有人可以解释为什么An unhandled exception of type Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll
被确定为result
类型?
答案 0 :(得分:10)
将dynamic
值传递给表达式时,整个表达式变为dynamic
。
动态的全部意义是关闭所有类型检查;编译器将始终假设dynamic
,即使代码明显错误。