1. 程式人生 > 實用技巧 >[筆記] C# 使用 lambda 表示式進行物件的值獲取與賦值

[筆記] C# 使用 lambda 表示式進行物件的值獲取與賦值

想要實現的效果:

xxxObj.Set(x=>x.Name, name)

如此,就可以實現:由業務方決定將 何值 寫到 何屬性 中。

關鍵程式碼

        /// <summary>
        /// 使用 lambda 表示式設定值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="target"></param>
        /// <param name="memberLambda"></param>
        /// <param name="value"></param>
        public static void SetPropertyValue<T, TValue>(this T target, Expression<Func<T, TValue>> memberLambda, TValue value)
        {
            if (memberLambda.Body is MemberExpression memberSelectorExpression)
            {
                var property = memberSelectorExpression.Member as PropertyInfo;
                if (property != null)
                {
                    property.SetValue(target, value);
                }
            }
        }

        /// <summary>
        /// 使用 lambda 表示式設定值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="target"></param>
        /// <param name="memberLambda"></param>
        /// <param name="default">沒有獲取到值時的預設值</param>
        public static TValue GetPropertyValue<T, TValue>(this T target, Expression<Func<T, TValue>> memberLambda, TValue @default)
        {
            if (memberLambda.Body is MemberExpression memberSelectorExpression)
            {
                var property = memberSelectorExpression.Member as PropertyInfo;
                if (property != null)
                {
                    return (TValue)property.GetValue(target);
                }
            }

            return @default;
        }

參考資料

c# - How to set property value using Expressions? - Stack Overflow

原文連結:https://www.cnblogs.com/jasongrass/p/14150518.html