我有这个动态变量,我通过它序列化一个json字符串.
dynamic result = serializer.Deserialize<dynamic>(json);
Run Code Online (Sandbox Code Playgroud)
从这里我获取在运行时result["success"]解析Dictionary<string, object>.然后我应用命名空间,System.Linq以便我可以调用.First()变量.
我写
KeyValuePair<string, object> temp = result["success"].First();
Run Code Online (Sandbox Code Playgroud)
然后我得到了错误,
'System.Collections.Generic.Dictionary'不包含'First'的定义
(但它确实,LINQ,对吗?)现在我改变了这样的代码.
KeyValuePair<string, object> temp =
((Dictionary<string, object>)result["success"]).First();
Run Code Online (Sandbox Code Playgroud)
它没有任何故障.所以我认为可能是因为动态解析变量.然后我试着用的原生属性Dictionary<TKey, TValue>像这样
var foo = result["success"].Keys;
Run Code Online (Sandbox Code Playgroud)
这也没有任何故障,它让我困惑,因此这篇文章.
我理解的是,动态解析的变量只接受本机属性,需要对继承的属性进行类型转换.
我的怀疑是
PS:在C#4.0中编码
但它与LINQ一样,对吧?
不,它没有.这里有一个扩展方法上IEnumerable<T>的First(),但扩展方法不能被称为dynamic"正常"的路值.
但是,您可以将其用作常规静态方法:
KeyValuePair<string, object> temp = Enumerable.First(result["success"]);
Run Code Online (Sandbox Code Playgroud)
对于你来说,这仍然是动态绑定的 - 而当你施放时 result["success"],在施放之后,一切都只是静态输入.
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |