我有一个 JArray,从文件中读取:
private void RemoveCatalog(Catalog catalog) {
System.IO.StreamReader filereader = new System.IO.StreamReader(@appDirectory + "\\list");
JArray myjarray = JArray.Parse(filereader.ReadToEnd());
filereader.Close();
string json = " {\"token\":\"" + catalog.Token + "\",\"name\":\"" + catalog.Name +"\",\"logo\":\"" + catalog.Logo + "\",\"theme\":\"" + catalog.Theme + "\"}";
JObject myCatalogAsJObject = JObject.Parse(json);
myjarray.Remove(myCatalogAsJObject);
}
我想删除对应于 myCatalogAsJObject
变量的 JObject,但是它不起作用,因为 myjarray.Contains(myCatalogAsJObject)
的答案是 false。
问题是 myjarray
实际上包含它:它是我的 JArray 中唯一的 JObject。
如果我执行 myCatalogAsJObject.ToString().Equals(myjarray.First.ToString())
,答案是正确的。
我卡住了。
最佳答案
.Contains
(和.Remove
)默认会比较引用。由于您正在创建一个新 JObject
,因此该数组不包含该实例。
您可以从数组中获取对象的实例并删除那个:
JObject match = myjarray.FirstOrDefault(j => j.token == catalog.token &&
j.name == catalog.name &&
j.logo == catalog.logo &&
j.theme == catalog.theme);
myjarray.Remove(match);
编辑:这是您的代码,经过简化:
JToken match = myjarray.FirstOrDefault(j => j.ToString().Equals(myCatalogAsJObject.ToString()));
myjarray.Remove(match);
关于c# - JArray.Contains 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343771/