Как игнорировать регистр при использовании JTokenEqualityComparer? - PullRequest
1 голос
/ 20 июня 2019

Как игнорировать регистр при использовании JTokenEqualityComparer?

        JTokenEqualityComparer comp = new JTokenEqualityComparer();

        // arrange
        var obj1 = new JObject();
        obj1.Add("First Name", "foo");
        obj1.Add("Last Name", "bar");

        var obj2 = new JObject();
        obj2.Add("First Name", "Foo");
        obj2.Add("Last Name", "Bar");


        // act
        var hashCode1 = comp.GetHashCode(obj1);
        var hashCode2 = comp.GetHashCode(obj2);


        // assert            
        Assert.Equal(hashCode1, hashCode2);

Обновление 1
Я хочу сравнить два объекта JO. Объекты могут быть глубоко сложным объектом. JToken имеет статический метод DeepEquals, который сравнивает два глубоких объекта. Однако я хочу получить уникальное хеш-значение и сохранить его в базе данных SQL. Таким образом, процедуры sql также могут выполнять сравнение.

из SO

Я видел, что у них есть внутренний метод с именем GetDeepHashCode, но реализация основана на других защищенных свойствах и поэтому я не могу «скопировать» код и создать метод расширения из него

и решение

Для этого вы можете использовать JTokenEqualityComparer.GetHashCode (токен JToken) цель. Он предоставляет доступ к методу GetDeepHashCode (), который вы видели.

...