反射針對相同名稱屬性給予值

  • 111
  • 0

在公司的情境DB的資料表有固定相同名稱的欄位
可能是建檔人或修改人
在複雜的資料要新增下
需要hardcode對這些相同欄位給值

所以想了方式讓程式碼精簡一點

 

private static T SetValue<T>(T source, string property, object value)
        {
            var type = source.GetType();

            type.GetProperty(property)?.SetValue(source, value);

            var props = type.GetProperties(BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)
                .Where(c => c.PropertyType.IsClass && c.PropertyType != typeof(string))
                .ToList();

            //GetValue只會回傳object 所以要用GetType()才能取到真正型別
            props.ForEach(c => SetValue(c.GetValue(source), property, value));
            return source;
        }

這樣遞迴的方式就可以一層一層給值
但是碰到IEnuerable的屬性可能就還是要hardcode了