[c#] PropertyInfo를 사용하여 속성 유형 찾기

사용자 지정 유효성 검사를 수행하기 위해 개체 트리를 동적으로 구문 분석하고 싶습니다. 유효성 검사는 그렇게 중요하지 않지만 PropertyInfo 클래스를 더 잘 이해하고 싶습니다.

이런 식으로 할 것입니다.

public bool ValidateData(object data)
{
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
    {
        if (the property is a string)
        {
            string value = propertyInfo.GetValue(data, null);

            if value is not OK
            {
                return false;
            }
        }
    }

    return true;
}

현재 내가 신경 쓰는 유일한 부분은 ‘속성이 문자열 인 경우’입니다. PropertyInfo 객체에서 유형이 무엇인지 어떻게 알 수 있습니까?

나는 문자열, 정수, 복식과 같은 기본적인 것들을 다루어야 할 것입니다. 그러나 나는 또한 객체를 다루어야 할 것이고, 그렇다면 객체 내부의 기본 데이터를 검증하기 위해 객체 트리를 더 아래로 탐색해야 할 경우 문자열 등도 가질 것입니다.

감사.



답변

PropertyInfo.PropertyType속성의 유형을 가져 오는 데 사용 합니다.

public bool ValidateData(object data)
{
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
    {
        if (propertyInfo.PropertyType == typeof(string))
        {
            string value = propertyInfo.GetValue(data, null);

            if value is not OK
            {
                return false;
            }
        }
    }

    return true;
}


답변

나는 방금이 훌륭한 게시물을 우연히 발견했습니다. 데이터가 문자열 유형인지 확인하는 경우 루프를 건너 뛰고이 구조체를 사용할 수 있습니다 (내 겸손한 의견으로는)

public static bool IsStringType(object data)
    {
        return (data.GetType().GetProperties().Where(x => x.PropertyType == typeof(string)).FirstOrDefault() != null);
    }


답변