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); } }
/// <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; } }