protected bool IsEqual()
        {
            CompareDrawerAttribute attr = GetAttr <CompareDrawerAttribute>();

            if (string.IsNullOrEmpty(attr.MemberName))
            {
                return(true);
            }

            object comparedValue = NativeDrawerUtility.GetMemberValue(attr.MemberName, Target);

            if (comparedValue == null && attr.Value == null)
            {
                return(true);
            }
            if (comparedValue == null || attr.Value == null)
            {
                return(false);
            }

            if (comparedValue.GetType() != attr.Value.GetType())
            {
                return(false);
            }

            if (TypeUtility.IsCastableTo(comparedValue.GetType(), typeof(IComparable)))
            {
                int compared = ((IComparable)comparedValue).CompareTo((IComparable)attr.Value);

                if (compared == 0)
                {
                    if (attr.Symbol == CompareSymbol.Gte || attr.Symbol == CompareSymbol.Lte || attr.Symbol == CompareSymbol.Eq)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    if (attr.Symbol == CompareSymbol.Neq)
                    {
                        return(true);
                    }
                    else if (attr.Symbol == CompareSymbol.Eq)
                    {
                        return(false);
                    }

                    if (compared > 0 && (attr.Symbol == CompareSymbol.Gt || attr.Symbol == CompareSymbol.Gte))
                    {
                        return(true);
                    }
                    else if (compared < 0 && (attr.Symbol == CompareSymbol.Lt || attr.Symbol == CompareSymbol.Lte))
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            else
            {
                bool result = comparedValue == attr.Value;
                if (result && (attr.Symbol == CompareSymbol.Eq || attr.Symbol == CompareSymbol.Lte || attr.Symbol == CompareSymbol.Gte))
                {
                    return(true);
                }
                else if (!result && (attr.Symbol == CompareSymbol.Neq))
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
 protected CompareAttrNativeDrawer(object target, CompareDrawerAttribute attr) : base(attr)
 {
     Target = target;
 }