Beispiel #1
0
        private static Query Update(IDataDescriptor descriptor, List <string> setFilter, List <string> whereFilter,
                                    IDictionary <string, object> setHash, IDictionary <string, object> whereHash)
        {
            var setHashKeyRewrite   = setHash.Keys.ToDictionary(k => Dialect.ResolveColumnName(descriptor, k), v => v);
            var whereHashKeyRewrite = RuntimeHelpers.Equals(setHash, whereHash)
                ? setHashKeyRewrite
                : whereHash.Keys.ToDictionary(k => Dialect.ResolveColumnName(descriptor, k), v => v);

            var whereParams = whereFilter.ToDictionary(key => whereHashKeyRewrite[key],
                                                       key => whereHash[whereHashKeyRewrite[key]]);

            var setParams = setFilter.ToDictionary(key => setHashKeyRewrite[key],
                                                   key => setHash[setHashKeyRewrite[key]]);

            var setParameters   = setParams.Keys.ToList();
            var whereParameters = whereParams.Keys.ToList();

            var sql = Dialect.Update(descriptor, Dialect.ResolveTableName(descriptor), descriptor.Schema, setFilter,
                                     whereFilter, setParameters, whereParameters, Dialect.SetSuffix);

            var parameters = Hash.FromDictionary(setParams.ToDictionary(k => k.Key + Dialect.SetSuffix, v => v.Value));

            parameters.Merge(whereParams);

            return(new Query(sql, parameters));
        }
Beispiel #2
0
    static void Main(string[] args)
    {
        int x = 1; int y = 1;

        bool ret = RuntimeHelpers.Equals(x, y);

        Console.WriteLine("The return value of RuntimeHelpers.Equals is: " + ret);
    }
Beispiel #3
0
    // Test that "RuntimeHelpers.Equals" bypasses virtual overrides
    // on "Object.Equals(Object)" to perform the base class identity
    // check on value types.
    public void TestHelpersEquals()
    {
        EqualsTest eq  = new EqualsTest();
        EqualsTest eq2 = new EqualsTest();

        Assert("Equals (1)", !(eq.Equals(eq)));
        Assert("Equals (2)", !(Object.Equals(eq, eq)));
        Assert("Equals (3)", RuntimeHelpers.Equals(eq, eq));
    }
Beispiel #4
0
 protected bool Set <T>(ref T field, T value, [CallerMemberName] string?propertyName = null)
 {
     if (RuntimeHelpers.Equals(field, value))
     {
         return(false);
     }
     field = value;
     OnPropertyChanged(propertyName);
     return(true);
 }
Beispiel #5
0
 public bool Equals(T x, T y)
 {
     if (typeof(T).IsValueType)
     {
         return(EqualityComparer <T> .Default.Equals(x, y));
     }
     else
     {
         return(RuntimeHelpers.Equals(x, y));
     }
 }
Beispiel #6
0
        public bool ContainsKey(TKey key)
        {
            for (var i = 0; i < _index; i++)
            {
                if (RuntimeHelpers.Equals(_key[i], key))
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #7
0
 public static bool ObjectEquals(object objA, object objB)
 {
     if (ReferenceEquals(objA, objB))
     {
         return(true);
     }
     if (objA is GameObject goA && objB is GameObject goB)
     {
         return(goA.GetInstanceID() == goB.GetInstanceID());
     }
     return(RuntimeHelpers.Equals(objA, objB));
 }
Beispiel #8
0
 public static bool operator ==(Point2D a, Point2D b)
 {
     if (RuntimeHelpers.Equals(a, b))
     {
         return(true);
     }
     if (RuntimeHelpers.Equals(a, null) || RuntimeHelpers.Equals(b, null))
     {
         return(false);
     }
     return(GeometricallyEquals(a, b));
 }
        /// <summary>
        /// 设置指定属性的值。
        /// </summary>
        /// <typeparam name="T">属性的类型。</typeparam>
        /// <param name="value">属性的新值。</param>
        /// <param name="propertyName">要设置值的属性的名称。</param>
        protected virtual void SetProperty <T>(T value,
                                               [CallerMemberName] string propertyName = null)
        {
            propertyName = propertyName ?? string.Empty;
            var property = this.GetProperty <T>(propertyName);

            this.Properties[propertyName] = (object)value;
            var propertyChanged = !RuntimeHelpers.Equals(property, value);

            if (propertyChanged)
            {
                this.NotifyPropertyChanged(propertyName);
            }
        }
Beispiel #10
0
        public bool TryGetValue(TKey key, out TValue value)
        {
            for (var i = 0; i < _index; i++)
            {
                if (RuntimeHelpers.Equals(_key[i], key))
                {
                    value = _value[i];
                    return(true);
                }
            }

            value = default;
            return(false);
        }
        /// <summary>
        /// 设置指定属性的值。
        /// </summary>
        /// <typeparam name="T">属性的类型。</typeparam>
        /// <param name="value">属性的新值。</param>
        /// <param name="propertyName">要设置值的属性的名称。</param>
        /// <exception cref="InvalidCastException">
        /// <paramref name="value"/> 无法转换为指定属性的类型。</exception>
        /// <exception cref="InvalidOperationException">
        /// <paramref name="propertyName"/> 为 <see langword="null"/> 或空字符串。</exception>
        protected virtual void SetProperty <T>(
            [AllowNull] T value, [CallerMemberName] string?propertyName = null)
        {
            if (this.IsEntityName(propertyName))
            {
                throw new InvalidOperationException();
            }
            var property        = this.ExchangeProperty(propertyName, value);
            var propertyChanged = !RuntimeHelpers.Equals(property, value);

            if (propertyChanged)
            {
                this.RelatedNotifyPropertyChanged(propertyName);
            }
        }
Beispiel #12
0
        /// <summary>
        /// 无环地确定指定的对象是否相等。
        /// </summary>
        /// <param name="x">要比较的第一个对象。</param>
        /// <param name="y">要比较的第二个对象。</param>
        /// <param name="compared">已经比较过的对象。</param>
        /// <returns>若 <paramref name="x"/> 和 <paramref name="y"/> 相等,
        /// 则为 <see langword="true"/>;否则为 <see langword="false"/>。</returns>
        /// <exception cref="InvalidCastException">无法强制转换 <paramref name="x"/>
        /// 或 <paramref name="y"/> 到 <typeparamref name="T"/> 类型。</exception>
        bool IAcyclicEqualityComparer.Equals(object?x, object?y, ISet <ObjectPair> compared)
        {
            if (RuntimeHelpers.Equals(x, y))
            {
                return(true);
            }
            if ((x is null) || (y is null))
            {
                return(false);
            }
            if (x.GetType() != y.GetType())
            {
                return(false);
            }

            return(this.Equals((T)x, (T)y, compared));
        }
Beispiel #13
0
        public static bool IsEmptyValue(object value)
        {
            if (value == null)
            {
                return(true);
            }

            if (defaultValues == null)
            {
                lock (lockObject)
                {
                    if (defaultValues == null)
                    {
                        defaultValues = new IdCache <object>();
                    }
                }
            }

            if (defaultValues.TryGetValue((long)Pointer.GetTypeHandle(value), out var default_value))
            {
                return(RuntimeHelpers.Equals(value, default_value));
            }

            lock (defaultValues)
            {
                var objectHandle = (long)Pointer.GetTypeHandle(value);

                if (!defaultValues.TryGetValue(objectHandle, out default_value))
                {
                    var type = value.GetType();

                    if (type.IsValueType)
                    {
                        default_value = Activator.CreateInstance(type);
                    }
                    else
                    {
                        default_value = null;
                    }

                    defaultValues.DirectAdd(objectHandle, default_value);
                }
            }

            return(RuntimeHelpers.Equals(value, default_value));
        }
        /// <summary>
        /// 确定指定的两个对象包含的值是否递归相等。
        /// </summary>
        /// <param name="value">要进行值相等比较的第一个对象。</param>
        /// <param name="other">要进行值相等比较的第二个对象。</param>
        /// <param name="compared">当前已经比较过的对象的键值对。</param>
        /// <returns>若 <paramref name="value"/> 与 <paramref name="other"/> 包含的值递归相等,
        /// 则为 <see langword="true"/>;否则为 <see langword="false"/>。</returns>
        /// <exception cref="MemberAccessException">调用方没有权限来访问对象的成员。</exception>
        private static bool RecursiveEquals(
            object?value, object?other, HashSet <ObjectPair> compared)
        {
            if (RuntimeHelpers.Equals(value, other))
            {
                return(true);
            }
            if ((value is null) || (other is null))
            {
                return(false);
            }
            if (value.GetType() != other.GetType())
            {
                return(false);
            }

            var pair = new ObjectPair(value, other);

            if (!compared.Add(pair))
            {
                return(true);
            }

            var type = value.GetType();

            if (type.IsPrimitive)
            {
                return(ObjectRuntimeValue.PrimitiveEquals(value, other));
            }
            if (type == typeof(string))
            {
                return(ObjectRuntimeValue.PrimitiveEquals(value, other));
            }
            else if (type.IsArray)
            {
                return(ObjectRuntimeValue.ArrayRecursiveEquals((Array)value, (Array)other, compared));
            }
            else
            {
                return(ObjectRuntimeValue.ObjectRecursiveEquals(value, other, compared));
            }
        }
        private void SplitNodeOutputs(NodeHelper scriptNode)
        {
            for (var i = 0; i < scriptNode.OutputPins.Count; ++i)
            {
                if (scriptNode.OutputPins[i].Links.Count > 0)
                {
                    var clone = scriptNode.CloneWithConnections();
                    for (var j = 0; j < clone.OutputPins.Count; ++j)
                    {
                        if (i != j)
                        {
                            clone.OutputPins[j].RemoveLinks();
                        }
                    }

                    var pin = clone.OutputPins[i];
                    clone.OutputPins.RemoveWhere(_ => !RuntimeHelpers.Equals(_, pin));
                }
            }
        }
Beispiel #16
0
        private static Query Update(IDataDescriptor descriptor, List <string> setFilter, List <string> whereFilter,
                                    IReadOnlyDictionary <string, object> setHash, IReadOnlyDictionary <string, object> whereHash)
        {
            whereHash = whereHash ?? new Dictionary <string, object>();

            var setHashKeyRewrite   = setHash.Keys.ToDictionary(k => Dialect.ResolveColumnName(descriptor, k), v => v);
            var whereHashKeyRewrite = RuntimeHelpers.Equals(setHash, whereHash)
                                ? setHashKeyRewrite
                                : whereHash.Keys.ToDictionary(k => Dialect.ResolveColumnName(descriptor, k), v => v);

            var whereParams = new Dictionary <string, object>();

            foreach (var key in whereFilter)
            {
                if (whereHash.TryGetValue(key, out var value))
                {
                    whereParams.Add(whereHashKeyRewrite[key], value);
                }
            }

            var whereParameters = whereParams.Keys.ToList();

            var setParams =
                setFilter.ToDictionary(key => setHashKeyRewrite[key], key => setHash[setHashKeyRewrite[key]]);
            var setParameters = setParams.Keys.ToList();

            var sql = Dialect.Update(descriptor, Dialect.ResolveTableName(descriptor), descriptor.Schema, setFilter,
                                     whereFilter, setParameters, whereParameters, Dialect.SetSuffix);

            var parameters =
                setParams.ToDictionary(k => $"{Dialect.Parameter}{k.Key}{Dialect.SetSuffix}", v => v.Value);

            foreach (var entry in whereParams.ToDictionary(k => $"{Dialect.Parameter}{k.Key}", v => v.Value))
            {
                parameters[entry.Key] = entry.Value;
            }

            return(new Query(sql, parameters));
        }
Beispiel #17
0
        public void TestEquals()
        {
            Assert.IsTrue(RuntimeHelpers.Equals(null, null));
            Assert.IsTrue(!RuntimeHelpers.Equals(new object(), null));
            Assert.IsTrue(!RuntimeHelpers.Equals(null, new object()));

            FooStruct f1 = new FooStruct();

            f1.i = 5;
            FooStruct f2 = new FooStruct();

            f2.i = 5;
            object o1 = f1;
            object o2 = o1;
            object o3 = f2;
            object o4 = "AAA";

            Assert.IsTrue(RuntimeHelpers.Equals(o1, o2));

            // This should do a bit-by-bit comparison for valuetypes
            Assert.IsTrue(RuntimeHelpers.Equals(o1, o3));
            Assert.IsTrue(!RuntimeHelpers.Equals(o1, o4));
        }
Beispiel #18
0
        public override bool Equals(object obj)
        {
            HostEntry key = obj as HostEntry;

            if (key == null)
            {
                return(false);
            }
            if (RuntimeHelpers.Equals(this, obj))
            {
                return(true);
            }
            if (this.Primary.Address == key.Primary.Address &&
                this.Standby.Address == key.Standby.Address)
            {
                return(true);
            }
            if (this.Primary.Address == key.Standby.Address &&
                this.Standby.Address == key.Primary.Address)
            {
                return(true);
            }
            return(false);
        }
Beispiel #19
0
        /// <summary>
        /// 无环地确定指定的对象是否相等。
        /// </summary>
        /// <param name="x">要比较的第一个对象。</param>
        /// <param name="y">要比较的第二个对象。</param>
        /// <param name="compared">已经比较过的对象。</param>
        /// <returns>若 <paramref name="x"/> 和 <paramref name="y"/> 相等,
        /// 则为 <see langword="true"/>;否则为 <see langword="false"/>。</returns>
        protected bool Equals(T?x, T?y, ISet <ObjectPair> compared)
        {
            if (RuntimeHelpers.Equals(x, y))
            {
                return(true);
            }
            if ((x is null) || (y is null))
            {
                return(false);
            }
            if (x.GetType() != y.GetType())
            {
                return(false);
            }

            var pair = new ObjectPair(x, y);

            if (!compared.Add(pair))
            {
                return(true);
            }

            return(this.EqualsCore(x, y, compared));
        }
Beispiel #20
0
 public virtual bool Equals(object obj)
 {
     return(RuntimeHelpers.Equals(this, obj));
 }
Beispiel #21
0
        /// <summary>
        /// Applies the constraint to an actual value, returning a ConstraintResult.
        /// </summary>
        public override ConstraintResult ApplyTo <TActual>(TActual actual)
        {
            var isDefault = RuntimeHelpers.Equals(actual, default(TActual));

            return(new ConstraintResult(this, actual, isDefault));
        }
 public override bool Equals(object obj)
 {
     return(RuntimeHelpers.Equals(this, obj));
 }
Beispiel #23
0
 public bool Equals(DiagramObject other)
 {
     return(RuntimeHelpers.Equals(this.Object, other.Object));
 }
Beispiel #24
0
 public bool Equals(DiagramMethodObject other)
 {
     return(RuntimeHelpers.Equals(this.Object, other.Object) && Method.Equals(other.Method));
 }
 public bool Equals(T x, T y)
 {
     return(RuntimeHelpers.Equals(x, y));
 }
Beispiel #26
0
 public virtual bool Equals(object obj) =>
 RuntimeHelpers.Equals(this, obj);