using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.Loader; namespace Wood.Util { public class ReflectionHelper { private static ConcurrentDictionary dictCache = new ConcurrentDictionary(); #region 得到类里面的属性集合 /// /// 得到类里面的属性集合 /// /// /// /// public static PropertyInfo[]? GetProperties(Type type, string[]? columns = null) { if(string.IsNullOrEmpty(type.FullName)) return null; PropertyInfo[]? properties = null; if (dictCache.ContainsKey(type.FullName)) { properties = dictCache[type.FullName] as PropertyInfo[]; } else { properties = type.GetProperties(); dictCache.TryAdd(type.FullName, properties); } if (columns != null && columns.Length > 0) { // 按columns顺序返回属性 var columnPropertyList = new List(); foreach (var column in columns) { var columnProperty = properties?.Where(p => p.Name == column).FirstOrDefault(); if (columnProperty != null) { columnPropertyList.Add(columnProperty); } } return columnPropertyList.ToArray(); } else { return properties; } } #endregion } }