Revision: 31759
Updated Code
at September 12, 2010 11:26 by jimfred
Updated Code
// [1] using PropertyOf PropertyInfo pi1 = PropertyOf(() => Checkbox1.Checked); // [2] Using Lambda to get a PropertyInfo from a CheckBox.Checked property. // This is a variation of [1] Expression<Func<bool>> expression = (() => Checkbox1.Checked); PropertyInfo pi2 = ((expression.Body as MemberExpression).Member as PropertyInfo); // [3] using PropertyHelper PropertyInfo pi3 = PropertyHelper<CheckBox>.GetProperty(x => x.Checked); // [4] using string name of property. PropertyInfo pi4 = typeof(CheckBox).GetProperty("Checked"); // This proves that all 4 methods are itentical. Debug.Assert(pi1 == pi2 && pi1 == pi3 && pi1 == pi4); // This is how the PropertyInfo is used to Set (or Get) the value. pi1.SetValue(Checkbox1, true, null); /// <summary> /// [1] /// Given a lambda expression of a Property, return the PropertyInfo for the property. /// http://codebetter.com/blogs/patricksmacchia/archive/2010/06/28/elegant-infoof-operators-in-c-read-info-of.aspx /// </summary> /// <typeparam name="T">Property type</typeparam> /// <param name="expression">Lambda expression</param> /// <returns>PropertyInfo for property</returns> internal static PropertyInfo PropertyOf<T>(Expression<Func<T>> expression) { MemberExpression body = (MemberExpression)expression.Body; return (PropertyInfo)body.Member; } /// <summary> /// [3] /// From http://stackoverflow.com/questions/491429/how-to-get-the-propertyinfo-of-a-specific-property /// </summary> /// <typeparam name="T"></typeparam> public static class PropertyHelper<T> { public static PropertyInfo GetProperty<TValue>( Expression<Func<T, TValue>> selector) { Expression body = selector; if (body is LambdaExpression) { body = ((LambdaExpression)body).Body; } switch (body.NodeType) { case ExpressionType.MemberAccess: return (PropertyInfo)((MemberExpression)body).Member; default: throw new InvalidOperationException(); } } }
Revision: 31758
Updated Code
at September 12, 2010 11:25 by jimfred
Updated Code
// [1] using PropertyOf PropertyInfo pi1 = PropertyOf(() => Checkbox1.Checked); // [2] Using Lambda to get a PropertyInfo from a CheckBox.Checked property. // This is a variation of [1] Expression<Func<bool>> expression = (() => Checkbox1.Checked); PropertyInfo pi2 = ((expression.Body as MemberExpression).Member as PropertyInfo); // [3] using PropertyHelper PropertyInfo pi3 = PropertyHelper<CheckBox>.GetProperty(x => x.Checked); // [4] using string name of property. PropertyInfo pi4 = typeof(CheckBox).GetProperty("Checked"); // This proves that all 4 methods are itentical. Debug.Assert(pi1 == pi2 && pi1 == pi3 && pi1 == pi4); // This is how the PropertyInfo is used to Set (or Get) the value. pi1.SetValue(Checkbox1, true, null); /// <summary> /// [1] /// Given a lambda expression of a Property, return the PropertyInfo for the property. /// http://codebetter.com/blogs/patricksmacchia/archive/2010/06/28/elegant-infoof-operators-in-c-read-info-of.aspx /// </summary> /// <typeparam name="T">Property type</typeparam> /// <param name="expression">Lambda expression</param> /// <returns>PropertyInfo for property</returns> internal static PropertyInfo PropertyOf<T>(Expression<Func<T>> expression) { MemberExpression body = (MemberExpression)expression.Body; return (PropertyInfo)body.Member; } /// <summary> /// [3] /// From http://stackoverflow.com/questions/491429/how-to-get-the-propertyinfo-of-a-specific-property /// </summary> /// <typeparam name="T"></typeparam> public static class PropertyHelper<T> { public static PropertyInfo GetProperty<TValue>( Expression<Func<T, TValue>> selector) { Expression body = selector; if (body is LambdaExpression) { body = ((LambdaExpression)body).Body; } switch (body.NodeType) { case ExpressionType.MemberAccess: return (PropertyInfo)((MemberExpression)body).Member; default: throw new InvalidOperationException(); } } }
Revision: 31757
Updated Code
at September 12, 2010 11:22 by jimfred
Updated Code
// [1] using PropertyOf PropertyInfo pi1 = PropertyOf(() => Checkbox1.Checked); // [2] Using Lambda to get a PropertyInfo from a CheckBox.Checked property. // This is a variation of [1] Expression<Func<bool>> expression = (() => Checkbox1.Checked); PropertyInfo pi2 = ((expression.Body as MemberExpression).Member as PropertyInfo); // [3] using PropertyHelper PropertyInfo pi3 = PropertyHelper<CheckBox>.GetProperty(x => x.Checked); // [4] using string name of property. PropertyInfo pi4 = typeof(CheckBox).GetProperty("Checked"); Debug.Assert(pi1 == pi2 && pi1 == pi3 && pi1 == pi4); pi1.SetValue(Checkbox1, true, null); } /// <summary> /// [1] /// Given a lambda expression of a Property, return the PropertyInfo for the property. /// http://codebetter.com/blogs/patricksmacchia/archive/2010/06/28/elegant-infoof-operators-in-c-read-info-of.aspx /// </summary> /// <typeparam name="T">Property type</typeparam> /// <param name="expression">Lambda expression</param> /// <returns>PropertyInfo for property</returns> internal static PropertyInfo PropertyOf<T>(Expression<Func<T>> expression) { MemberExpression body = (MemberExpression)expression.Body; return (PropertyInfo)body.Member; } /// <summary> /// [3] /// From http://stackoverflow.com/questions/491429/how-to-get-the-propertyinfo-of-a-specific-property /// </summary> /// <typeparam name="T"></typeparam> public static class PropertyHelper<T> { public static PropertyInfo GetProperty<TValue>( Expression<Func<T, TValue>> selector) { Expression body = selector; if (body is LambdaExpression) { body = ((LambdaExpression)body).Body; } switch (body.NodeType) { case ExpressionType.MemberAccess: return (PropertyInfo)((MemberExpression)body).Member; default: throw new InvalidOperationException(); } } }
Revision: 31756
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at September 12, 2010 11:18 by jimfred
Initial Code
// [2] Using Lambda to get a PropertyInfo from a CheckBox.Checked property. // This is a variation of [1] Expression<Func<bool>> expression = (() => Checkbox1.Checked); PropertyInfo pi1 = ((expression.Body as MemberExpression).Member as PropertyInfo);
Initial URL
Initial Description
It\'s not possible to get a reference to a property in C#. A reference would allow getting/setting a property inside another function or while enumerating a list. The infoof operator would work but it doesn\'t exist yet. This code shows several ways to get a PropertyInfo for a given property. #4 is the simplest but has the disadvantage that the string will not auto-rename.
Initial Title
C#, getting a reference to a property such as CheckBox.Checked
Initial Tags
Initial Language
C#