question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Custom Compare + Expando = Ignored Ignores

See original GitHub issue

Hello,

I wrote a custom compare class (that checks if the string is actually a float)

so things like “1” and “1.000000” won’t show up as a difference

but when using said custom compare class, my MembersToIgnore list is not longer being respected

` [Test] public void test() { abc a = new abc() { ex = JsonConvert.DeserializeObject<ExpandoObject>(“{"test": "1"}”) };

        abc b = new abc()
        {
            ex = new ExpandoObject()
        };

        CompareLogic compareLogic = new CompareLogic();
        compareLogic.Config.MembersToIgnore.Add("*test*");
        compareLogic.Config.MembersToIgnore.Add("*ex.test*");
        compareLogic.Config.MembersToIgnore.Add("*.ex.test*");
        compareLogic.Config.MembersToIgnore.Add("*abc.ex.test*");
        compareLogic.Config.MembersToIgnore.Add("*.abc.ex.test*");
        compareLogic.Config.MembersToIgnore.Add("test*");
        compareLogic.Config.MembersToIgnore.Add("ex.test*");
        compareLogic.Config.MembersToIgnore.Add(".ex.test*");
        compareLogic.Config.MembersToIgnore.Add("abc.ex.test*");
        compareLogic.Config.MembersToIgnore.Add(".abc.ex.test*");
        compareLogic.Config.MembersToIgnore.Add("*test");
        compareLogic.Config.MembersToIgnore.Add("*ex.test");
        compareLogic.Config.MembersToIgnore.Add("*.ex.test");
        compareLogic.Config.MembersToIgnore.Add("*abc.ex.test");
        compareLogic.Config.MembersToIgnore.Add("*.abc.ex.test");
        compareLogic.Config.MembersToIgnore.Add("test");
        compareLogic.Config.MembersToIgnore.Add("ex.test");
        compareLogic.Config.MembersToIgnore.Add(".ex.test");
        compareLogic.Config.MembersToIgnore.Add("abc.ex.test");
        compareLogic.Config.MembersToIgnore.Add(".abc.ex.test");
        compareLogic.Config.CustomComparers.Add(new StringMightBeFloat(RootComparerFactory.GetRootComparer()));
        compareLogic.Config.MaxDifferences = 50;

        ComparisonResult result = compareLogic.Compare(a, b);
    }

    public class abc
    {
        public ExpandoObject ex;
    }
    public class StringMightBeFloat : BaseTypeComparer
    {
        public StringMightBeFloat(RootComparer rootComparer) : base(rootComparer)
        {
        }

        public override bool IsTypeMatch(Type type1, Type type2)
        {
            return type1 == typeof(string) && type2 == typeof(string);
        }

        public override void CompareType(CompareParms parms)
        {
            {

                var st1 = (string)parms.Object1;
                var st2 = (string)parms.Object2;

                if (st1.Equals(st2))
                {
                    return;
                }

                float flt1;
                float flt2;

                if (float.TryParse(st1, out flt1) && float.TryParse(st2, out flt2))
                {
                    if (flt1.Equals(flt2))
                    {
                        return;
                    }
                }

                AddDifference(parms);
            }
        }
    }`

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Comments:11 (9 by maintainers)

github_iconTop GitHub Comments

1reaction
GregFinzercommented, May 16, 2019
0reactions
GregFinzercommented, May 24, 2019

Closing after the fix

Read more comments on GitHub >

github_iconTop Results From Across the Web

Ignore ExpandoObject Properties with JSON.Net Serializer ...
Is it possible to ignore ExpandoObject properties, in particular those of Delegate type, when using JsonConvert(expando, formatting, ...
Read more >
Using Objects Comparer To Compare Complex Objects In C#
Briefly, Objects Comparer is an object-to-object comparer that allows us to compare objects recursively member by member and to define custom ...
Read more >
Using ObjectsComparer to compare objects in .Net
Briefly, Objects Comparer is an object-to-object comparer, which allows to compare objects recursively member by member and define custom comparison rules for ...
Read more >
Working with Dynamic Objects: Beyond the Basics ...
ExpandoObjects let you dynamically add members to your object at runtime ... normally ignore any methods you added (probably what you want).
Read more >
Using Objects Comparer to Compare Complex Objects in C
Objects Comparer framework provides mechanism to recursively compare complex objects by properties (supports arrays, lists, different types ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found