Why does JArray.Contains
always returns false
, what am I doing wrong ?
var array = JArray.Parse("['abc', 'aaa']");
Console.WriteLine("1: " array.Contains("abc")); // false
Console.WriteLine("2: " array.Contains((JToken)"abc")); // false
CodePudding user response:
The implementation of Contains
rely on IndexOf
then IndexOfItem
then IndexOfReference
which use ReferenceEquals
(the code is here).
Since the calls to Contains
implicitly create new JToken
references, those references are different and the function return false
If you call Contains
with a reference that is actually in the array, it will 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
CodePudding user response:
try this
var array = JArray.Parse("['abc', 'aaa']");
var data = array.Any(x => x.Value<string>() == "abc");
Console.WriteLine(data);