in src/PSRule.Rules.Azure/Data/Template/ExpressionHelpers.cs [251:279]
internal static bool Equal(object o1, object o2)
{
// One null
if (IsNull(o1) || IsNull(o2))
return IsNull(o1) && IsNull(o2);
// Arrays
if (o1 is Array array1 && o2 is Array array2)
return SequenceEqual(array1, array2);
else if (o1 is Array || o2 is Array)
return false;
// String and int
if (TryString(o1, out var s1) && TryString(o2, out var s2))
return s1 == s2;
else if (TryString(o1, out _) || TryString(o2, out _))
return false;
else if (TryLong(o1, out var i1) && TryLong(o2, out var i2))
return i1 == i2;
else if (TryLong(o1, out var _) || TryLong(o2, out var _))
return false;
// JTokens
if (o1 is JToken t1 && o2 is JToken t2)
return JTokenEquals(t1, t2);
// Objects
return ObjectEquals(o1, o2);
}