示例#1
0
        public bool Check(object fieldValue, Type fieldType)
        {
            int compResult =
                fieldType.IsValueType
                ? ValueContractHelper.Check(fieldValue, otherValue, fieldType)
                : Comparer.Default.Compare(fieldValue, otherValue);

            ValueCompareMode mode = this.mode;

            if (mode == ValueCompareMode.Equals)
            {
                return(compResult == 0);
            }
            else if (mode == ValueCompareMode.Inequals)
            {
                return(compResult != 0);
            }
            else if (mode == ValueCompareMode.Lesser)
            {
                return(compResult < 0);
            }
            else if (mode == ValueCompareMode.LessOrEqual)
            {
                return(compResult <= 0);
            }
            else if (mode == ValueCompareMode.Greater)
            {
                return(compResult > 0);
            }
            else
            {
                return(compResult >= 0);
            }
        }
示例#2
0
        /// <summary>
        /// 필드가 좌측 피연산자가 됩니다.
        /// <para/>
        /// 가령 '<see cref="ValueCompareMode.Lesser"/>'의 경우
        /// '필드 값이 <paramref name="otherValue"/> 보다 작다'라는 뜻이 됩니다.
        /// </summary>
        public ValueContractAttribute(object otherValue, ValueCompareMode mode)
        {
            this.otherValue = otherValue;

            if (mode < ValueCompareMode.Equals || mode > ValueCompareMode.GreatOrEqual)
            {
                // 범위 초과
                this.mode = ValueCompareMode.Equals;
            }
            else if (otherValue.GetType().IsValueType == false && mode > ValueCompareMode.Inequals)
            {
                // 부적절한 비교연산자
                this.mode =
                    mode >= ValueCompareMode.Greater
                    ? ValueCompareMode.Equals
                    : ValueCompareMode.Inequals;
            }
            else
            {
                this.mode = mode;
            }
        }