첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

■ IValidatableObject 인터페이스의 Validate 메소드를 사용해 객체를 검증하는 방법을 보여준다.

TestProject.zip
0.00MB

▶ Student.cs

using System.ComponentModel.DataAnnotations;

namespace TestProject;

/// <summary>
/// 학생
/// </summary>
public class Student : IValidatableObject
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Property
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 이용 가능 여부 - Enabled

    /// <summary>
    /// 이용 가능 여부
    /// </summary>
    [Required]
    public bool Enabled { get; set; }

    #endregion
    #region 등급 1 - Grade1

    /// <summary>
    /// 등급 1
    /// </summary>
    [Range(1, 5)]
    public int Grade1 { get; set; }

    #endregion
    #region 등급 2 - Grade2

    /// <summary>
    /// 등급 2
    /// </summary>
    [Range(1, 5)]
    public int Grade2 { get; set; }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 검증하기 - Validate(context)

    /// <summary>
    /// 검증하기
    /// </summary>
    /// <param name="context">검증 컨텍스트</param>
    /// <returns>검증 결과 열거 가능형</returns>
    public IEnumerable<ValidationResult> Validate(ValidationContext context)
    {
        List<ValidationResult> validationResultList = new List<ValidationResult>();

        if(Enabled)
        {
            Validator.TryValidateProperty
            (
                Grade1,
                new ValidationContext(this, null, null) { MemberName = "Grade1" },
                validationResultList
            );

            Validator.TryValidateProperty
            (
                Grade2,
                new ValidationContext(this, null, null) { MemberName = "Grade2" },
                validationResultList
            );

            if(Grade1 > Grade2)
            {
                validationResultList.Add(new ValidationResult("Grade1은 Grade2보다 커야 합니다."));
            }
        }

        return validationResultList;
    }

    #endregion
}

 

▶ Program.cs

using System.ComponentModel.DataAnnotations;

namespace TestProject;

/// <summary>
/// 프로그램
/// </summary>
class Program
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Static
    //////////////////////////////////////////////////////////////////////////////// Private

    #region 프로그램 시작하기 - Main()

    /// <summary>
    /// 프로그램 시작하기
    /// </summary>
    private static void Main()
    {
        Student student = new Student()
        {
            Enabled = true,
            Grade1  = 15,
            Grade2  = 12
        };

        bool validateAllProperties = false;

        List<ValidationResult> validationResultList = new List<ValidationResult>();

        bool isValid = Validator.TryValidateObject
        (
            student, new ValidationContext(student, null, null),
            validationResultList,
            validateAllProperties
        );

        if(!isValid)
        {
            foreach(ValidationResult validationResult in validationResultList)
            {
                Console.WriteLine(validationResult);
            }
        }
    }

    #endregion
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요