在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  C#  網(wǎng)絡安全/ JObject為什么不能調(diào)用linq方法?

JObject為什么不能調(diào)用linq方法?

Newtonsoft.Json.Linq.JObject明明實現(xiàn)了IEnumerable<T>,具體來說是IEnumerable<KeyValuePair<string, JToken>>,看了元數(shù)據(jù)和源碼,也不是顯式實現(xiàn)的,那按說JObject類型的對象是可以直接調(diào)用Select、Where等linq擴展方法的,但偏偏就是不行,代碼如下:

using System.Linq;
...
var jobj = new JObject();
var xxx = jobj.Select(x=>x); //報錯:JObject未包含Select定義,也不存在第1個參數(shù)為JObject的Select擴展方法...
foreach(var x in jobj) { } //可以

實在不知道什么道理,求指點迷津。

回答
編輯回答
空痕

在爆棧問到原因了,是因為JObject除了本身實現(xiàn)了一個IEnumerable<KeyValuePair<string, JToken>>,它實現(xiàn)的另一個接口JContainer也實現(xiàn)了一個IEnumerable<JToken>,等于JObject直接和間接實現(xiàn)了兩個不同的IEnumerable<T>,當.Select的時候編譯器不能確定調(diào)用哪個類型的Select,所以就這樣了。

可以將jobj顯式轉(zhuǎn)換為IEnumerable<XXX>后調(diào)用。

2017年11月27日 13:42