[C#] Property가 존재하는지 체크하고 값을 얻는 메서드

2015. 11. 26. 16:55Coders

시나리오.


dll 여러 개가 조합된 프로그램을 개발하고, 유지보수 하고 있습니다.

그런데, A 라는 dll 내부의 HaHa 라는 클래스에 새로이 OhMyGod 라는 이름의 Property를 추가했습니다. 그리고, 해당 클래스로 생성된 객체를 다른 B 라는 dll 에서 사용을 합니다.

모든 일이라는 게 생각대로 돌아가지 않기 때문에, 자칫 A 라는 dll 은 업데이트가 되질 않고, B 라는 dll만 업데이트 되어 버릴 수가 있지요. 그와 같은 상황이 벌어질 경우, B dll 의 클래스가 A dll 의 HaHa 클래스의 OhMyGod 프로퍼티에 접근하면? 뻑이 나지요.


썰이 길었는데요,

이런 경우를 방지하기 위해선, Reflection 을 통해 해당 Property의 값을 읽어줘야 합니다.

/// <summary>
/// 해당 객체에 프로퍼티가 있으면 프로퍼티 값을 리턴
/// </summary>
/// <param name="src">오브젝트</param>
/// <param name="propName">프로퍼티 명</param>
/// <param name="defValue">기본 값</param>
/// <returns>읽은 값 또는 Default 값</returns>
public static T GetPropValue<T>(object src, string propName, T defValue)
{
	T ret = defValue;

	try
	{
		if (src != null)
		{
			System.Reflection.PropertyInfo pi =
				src.GetType().GetProperty(propName, typeof(T));

			ret = (T)Convert.ChangeType(pi.GetValue(src, null), typeof(T));
		}
	}
	catch (System.Exception ex)
	{
		System.Diagnostics.Debug.WriteLine(ex);
		ret = defValue;
	}

	return ret;
}

쓰는 예제는 이 예제를 응용해 보시길.


엇? 그런데 비슷한 글을 예전에 2회나 썼더군요.

[C#] Class 의 string 프로퍼티 값의 NULL 문자열 제거

[C#] 프로퍼티 값을 세팅하자.


그래도, 뭐. 이 글은 그냥 둘게요.

이렇게 기억력이 붕어 입니다.