C# - 속성을 사용하여 항목 체크

DisplayName과 StringLength, Required 라는 기존 속성을 사용한다.
Attribute.GetCustomAttribut 메소드로 대상( 이 코드에서는 프로퍼티)에서 속성을 얻을 수 있다.

using System;
using System.Reflection;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

public class Program
{
    public static void Main()
    {
        Entity entity = new Entity(){Id = "123456", Name = ""};

        validate(entity);
    }

    private static void validate(object obj)
    {
        foreach(PropertyInfo prop in obj.GetType().GetProperties())
        {
            // 값
            string val = prop.GetValue(obj).ToString();
            // DisplayName 속성 취득
            DisplayNameAttribute dispNameAttr = Attribute.GetCustomAttribute(prop, typeof(DisplayNameAttribute)) as DisplayNameAttribute;
            // StringLength 속성 취득
            StringLengthAttribute lenAttr = Attribute.GetCustomAttribute(prop, typeof(StringLengthAttribute)) as StringLengthAttribute;
            // Required 속성 취득
            RequiredAttribute reqAttr = Attribute.GetCustomAttribute(prop, typeof(RequiredAttribute)) as RequiredAttribute;

            // 조사 처리
            if (lenAttr != null && val.Length > lenAttr.MaximumLength)
            {
                Console.WriteLine(string.Format("{0}({1})는 최대 길이 {2}를 넘었습니다.", dispNameAttr.DisplayName, val, lenAttr.MaximumLength));
            }
            if (reqAttr != null && string.IsNullOrEmpty(val))
            {
                Console.WriteLine(string.Format("{0}는 필수 항목입니다.", dispNameAttr.DisplayName));
            }
        }
    }

    private class Entity
    {
        [DisplayName("ID")]
        [StringLength(5)]
        [Required]
        public string Id {get;set;}

        [DisplayName("なまえ")]
        [StringLength(20)]
        [Required]
        public string Name {get;set;}
    } 
}


결과

ID(123456)는 최대 길이 5를 넘었습니다.
이름은 필수 항목입니다.



출처: http://qiita.com/urushibata/items/85ea115e85e7ab8f208f


이 글은 2018-02-23에 작성되었습니다.