コード例 #1
0
    public void SetAttribute(string name, object value)
    {
        if (value == default)
        {
            if (_attributes.Remove(name))
            {
                Dirty = true;
            }

            return;
        }

        if (_attributes.TryGetValue(name, out object existing))
        {
            try
            {
                if (ComparisonHelper.IsSameValue(existing, value))
                {
                    return;
                }
            }
            catch (Exception e)
            {
                throw new InvalidOperationException($"Unable to compare values for '{PublishTopic}'", e);
            }

            return;
        }

        _attributes[name] = value;
        Dirty             = true;
    }
コード例 #2
0
    public static void SetIfChanged <T>(this JObject obj, string name, T newValue, Action onSet)
    {
        if (Equals(newValue, default(T)))
        {
            // Remove a value
            if (obj.Remove(name))
            {
                onSet();
            }

            return;
        }

        void Overwrite()
        {
            obj[name] = JToken.FromObject(newValue);
            onSet();
        }

        if (obj.TryGetValue(name, out JToken val) && val != null)
        {
            // Compare
            if (newValue is Array newArray && val is JArray existingArray)
            {
                if (newArray.Length != existingArray.Count)
                {
                    Overwrite();
                    return;
                }

                // Compare each value
                for (int i = 0; i < newArray.Length; i++)
                {
                    // TODO: Other types
                    if (!ComparisonHelper.IsSameValue(newArray.GetValue(i), existingArray.Value <string>(i)))
                    {
                        Overwrite();
                        return;
                    }
                }

                // No difference
            }
            else
            {
                T existing = val.Value <T>();

                if (!ComparisonHelper.IsSameValue(existing, newValue))
                {
                    Overwrite();
                    return;
                }
            }
        }
コード例 #3
0
    public void SameValueTests()
    {
        DateTime dt  = new DateTime(2021, 10, 11, 18, 33, 12, DateTimeKind.Utc);
        DateTime dt2 = new DateTime(2021, 10, 11, 18, 33, 12, DateTimeKind.Utc);

        Assert.True(ComparisonHelper.IsSameValue(dt, dt2));

        DateTime dt3 = new DateTime(2021, 10, 11, 18, 33, 11, DateTimeKind.Utc);

        Assert.False(ComparisonHelper.IsSameValue(dt, dt3));

        Assert.True(ComparisonHelper.IsSameValue(50, 50));
        Assert.False(ComparisonHelper.IsSameValue(50, 51));

        Assert.True(ComparisonHelper.IsSameValue(1152921504606846976L, 1152921504606846976L));
        Assert.False(ComparisonHelper.IsSameValue(1152921504606846977L, 1152921504606846975L));
    }
コード例 #4
0
        public void SetAttribute(string name, object value)
        {
            if (value == default)
            {
                if (_attributes.Remove(name))
                {
                    Dirty = true;
                }

                return;
            }

            if (_attributes.TryGetValue(name, out object existing) && ComparisonHelper.IsSameValue(existing, value))
            {
                return;
            }

            _attributes[name] = value;
            Dirty             = true;
        }