You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.8 KiB
57 lines
1.8 KiB
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<string, object> dictCache = new ConcurrentDictionary<string, object>();
|
|
|
|
#region 得到类里面的属性集合
|
|
/// <summary>
|
|
/// 得到类里面的属性集合
|
|
/// </summary>
|
|
/// <param name="type"></param>
|
|
/// <param name="columns"></param>
|
|
/// <returns></returns>
|
|
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<PropertyInfo>();
|
|
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
|
|
}
|
|
}
|
|
|