[C#] 범위 데이터 주석 속성을 사용하여 최소이지만 최대 소수는 지정하지 않는 방법은 무엇입니까?

가격의 10 진수 필드가 0보다 크거나 같아야한다고 지정하고 싶지만 실제로 최대 값을 부과하고 싶지 않습니다.

여기에 내가 지금까지 가지고있는 것이 있습니다 …이 작업을 수행하는 올바른 방법이 무엇인지 잘 모르겠습니다.

[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }



답변

이런 식으로 어떻습니까 :

[Range(0.0, Double.MaxValue, ErrorMessage = "The field {0} must be greater than {1}.")]

그것은 당신이 찾고있는 것을해야하며 문자열 사용을 피할 수 있습니다.


답변

문자열이 멋지게 보이는 것에 대해 걱정한다면 다음을 수행 할 수 있습니다.

    [Range(0, Double.PositiveInfinity)]

기본 오류 메시지는 다음과 같습니다.

SuchAndSuch 필드는 0과 무한대 사이 여야합니다.


답변

최대 값을 수동으로 입력하는 것 외에는 선택의 여지가없는 것 같습니다. 나는 당신이 그것을 지정할 필요가없는 일종의 과부하가 있기를 바랐습니다.

[Range(typeof(decimal), "0", "79228162514264337593543950335")]
public decimal Price { get; set; }


답변

당신이 사용할 수있는:

[Min(0)]

이렇게하면 필요한 최소값 0 (영)이 적용되고 최대 값이 적용되지 않습니다.

이것을 사용 하려면 DataAnnotationsExtensions 가 필요 합니다.


답변

가격을 다루는 경우 1 조 달러 이상의 비용이 들지 않는다고 가정 할 수 있습니다.

나는 사용할 것이다 :

[Range(0.0, 1000000000000)]

또는 실제로 필요한 경우 Decimal.MaxValue쉼표없이 값을 붙여 넣으십시오 .79,228,162,514,264,337,593,543,950,335

짐바브웨 출신이 아닌 경우이 중 하나가 제대로 작동합니다.


답변

사용자 정의 유효성 검사를 사용할 수 있습니다.

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public int IntValue { get; set; }

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public decimal DecValue { get; set; }

검증 방법 유형 :

public class ValidationMethods
{
    public static ValidationResult ValidateGreaterOrEqualToZero(decimal value, ValidationContext context)
    {
        bool isValid = true;

        if (value < decimal.Zero)
        {
            isValid = false;
        }

        if (isValid)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult(
                string.Format("The field {0} must be greater than or equal to 0.", context.MemberName),
                new List<string>() { context.MemberName });
        }
    }
}


답변

나는 이런 식으로 시도하려고했다 :

[Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than or equal to zero.")]

그러나이 작업의 문제점은 컴파일러가 상수 식을 원한다는 것 ((double)0).ToString()입니다. 컴파일러는 것입니다 걸릴

[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]