EasyMES/WaterCloud.Code/ReflectionHelper.cs
2022-10-20 17:12:54 +08:00

111 lines
3.5 KiB
C#

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
namespace WaterCloud.Code
{
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)
{
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;
}
}
public static object GetObjectPropertyValue<T>(T t, string propertyname)
{
Type type = typeof(T);
PropertyInfo property = type.GetProperty(propertyname);
if (property == null) return string.Empty;
object o = property.GetValue(t, null);
if (o == null) return string.Empty;
return o;
}
#endregion
/// <summary>
/// 反射获取模块名
/// </summary>
/// <returns></returns>
public static string GetModuleName(int count=2)
{
try
{
string className = new StackFrame(count, true).GetMethod().DeclaringType.FullName;
className = className.Split('+')[0];
className = className.Split('.').LastOrDefault();
string moduleName = className.Substring(0, className.Length - 7);
return moduleName;
}
catch (Exception ex)
{
LogHelper.WriteWithTime(ex);
return "";
}
}
/// <summary>
/// 反射获取方法名
/// </summary>
/// <returns></returns>
public static string GetClassName(int count = 4)
{
try
{
if (GlobalContext.SystemConfig.Debug == true && count == 4)
{
count++;
}
string className = new StackFrame(count, true).GetMethod().DeclaringType.FullName;
className = className.Split('+')[0];
className = className.Split('.').LastOrDefault();
return className;
}
catch (Exception ex)
{
LogHelper.WriteWithTime(ex);
return "";
}
}
}
}