JArray.Contains returns 错误
JArray.Contains returns false
为什么JArray.Contains
总是returnsfalse
,我做错了什么?
var array = JArray.Parse("['abc', 'aaa']");
Console.WriteLine("1: " + array.Contains("abc")); // false
Console.WriteLine("2: " + array.Contains((JToken)"abc")); // false
试试这个
var array = JArray.Parse("['abc', 'aaa']");
var data = array.Any(x => x.Value<string>() == "abc");
Console.WriteLine(data);
Contains
的实现依赖IndexOf
然后IndexOfItem
然后IndexOfReference
其中使用ReferenceEquals
(代码是here)。
由于对 Contains
的调用隐式创建了新的 JToken
引用,这些引用是不同的,并且函数 return false
如果您调用 Contains
时使用实际在数组中的引用,它将 return true
:
var array = JArray.Parse("['abc', 'aaa']");
var first = array[0];
Console.WriteLine("1: " + array.Contains("abc")); // false
Console.WriteLine("2: " + array.Contains((JToken)"abc")); // false
Console.WriteLine("3: " + array.Contains(first)); // true
为什么JArray.Contains
总是returnsfalse
,我做错了什么?
var array = JArray.Parse("['abc', 'aaa']");
Console.WriteLine("1: " + array.Contains("abc")); // false
Console.WriteLine("2: " + array.Contains((JToken)"abc")); // false
试试这个
var array = JArray.Parse("['abc', 'aaa']");
var data = array.Any(x => x.Value<string>() == "abc");
Console.WriteLine(data);
Contains
的实现依赖IndexOf
然后IndexOfItem
然后IndexOfReference
其中使用ReferenceEquals
(代码是here)。
由于对 Contains
的调用隐式创建了新的 JToken
引用,这些引用是不同的,并且函数 return false
如果您调用 Contains
时使用实际在数组中的引用,它将 return true
:
var array = JArray.Parse("['abc', 'aaa']");
var first = array[0];
Console.WriteLine("1: " + array.Contains("abc")); // false
Console.WriteLine("2: " + array.Contains((JToken)"abc")); // false
Console.WriteLine("3: " + array.Contains(first)); // true