■ Expression<T> 클래스를 사용해 속성명을 구하는 방법을 보여준다.
▶ Student.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
namespace TestProject { /// <summary> /// 학생 /// </summary> public class Student { //////////////////////////////////////////////////////////////////////////////////////////////////// Property ////////////////////////////////////////////////////////////////////////////////////////// Public #region ID - ID /// <summary> /// ID /// </summary> public int ID { get; set; } #endregion #region 성명 - Name /// <summary> /// 성명 /// </summary> public string Name { get; set; } #endregion } } |
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
using System.Linq.Expressions; namespace TestProject; /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 속성명 구하기 - GetPropertyName<T>(expression) /// <summary> /// 속성명 구하기 /// </summary> /// <typeparam name="T">속성 타입</typeparam> /// <param name="expression">수식</param> /// <returns>속성명</returns> private static string GetPropertyName<T>(Expression<Func<T>> expression) { MemberExpression memberExpression = expression.Body as MemberExpression; if(memberExpression == null) { throw new ArgumentException("You must pass a lambda of the form : '() => Class.Property' or '() => object.Property'"); } string result = string.Empty; do { result = memberExpression.Member.Name + "." + result; memberExpression = memberExpression.Expression as MemberExpression; } while(memberExpression != null); result = result.Remove(result.Length - 1); return result; } #endregion #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { Student student = new Student { ID = 1, Name = "홍길동" }; string name = GetPropertyName(() => student.Name.Length); Console.WriteLine(name); } #endregion } |