我在c#中使用dynamic是相当新的,我得到一个奇怪的错误,我希望有人可以帮我解释或解决。
我正在做以下事情:
Class1
{
Class2 _otherClass = new Class2();
private void SendToClass2()
{
dynamic data = new ExpandoObject();
data.value1 = "Hello Wrold";
data.value2 = some unknown type // (for simplicity let's say another string)
_otherClass.UseTheValues(data)
}
}
Class 2就像
一样构建Class2
{
UseTheValues(object T)
{
Serialize (T)
}
}
我在调试时工作正常,我可以将动态数据视为:
data Dynamic Results:
[0] {[ Value1, "Hello World" ]}
[1] {[ Value2, value ]}
所以数据似乎是正确创建的, 但是在另一台机器的运行时,我得到一个例外:
我在这里错过了一些明显的东西吗?类型:Action_Error |来自:1级|位置:SendToClass2()
CSharp Binder.RuntimeBinderException:'数据'不包含 UseTheValues的定义。
编辑:我应该补充说,错误发生在它被发送到我们的夜间构建之后,它会扰乱变量,函数,方法等,以使局外人更难以看到正在发生的事情完成,错误消息显示为
' c2565dssad6f5ds6fsdf65'不包含UseTheValues的定义
我想也许它与" UseTheValues"被视为动态表达式,仅在运行时解析。
编辑2 是的,事实证明它与我们的夜间建设者有关,他们扰乱了代码,但是无法加扰动态表达式,因此当加扰变量尝试时会抛出错误访问方法的(非)加扰版本。