在Newtonsoft JObjects上使用dynamic时Microsoft.CSharp.RuntimeBinder.RuntimeBinderException,我的调试输出得到了很多.虽然异常必须被困在Microsoft.CSharp.dll中的某个地方,但它让我感到非常不舒服.有什么办法可以阻止他们(除了完全放弃动态)吗?
这是一个简短的测试程序,它输出以下一个例外:
using System;
using Newtonsoft.Json.Linq;
namespace DynamicTest {
class Program {
static void Main(string[] args) {
JObject j = new JObject();
j["DocumentName"] = "Name";
dynamic d = j;
d.DocumentName = "Changed";
}
}
}
Run Code Online (Sandbox Code Playgroud) 我觉得我错过了一些明显的东西,所以请随意向我指出.
我有一个简单的单元测试来说明我的问题:
[Test]
public void DynamicTest()
{
dynamic myDynamic = new ExpandoObject();
myDynamic.Prop = "abc";
Assert.AreEqual("abc",myDynamic.Prop);
}
Run Code Online (Sandbox Code Playgroud)
当我执行单元测试时,它会通过.到现在为止还挺好.
如果我选择调试单元测试(在调试 - > VS中的异常下勾选所有CLR异常),我会看到一个RuntimeBinderException:

它不是致命的,所以我可以击中F5继续并且测试仍然通过,但这似乎是错误的.我在这里做错了吗?在我们的应用程序的一般使用过程中获取这些异常非常烦人.或者我应该取消RuntimeBinderException的框并忽略它?