using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection;
|
|
namespace JiepeiWMS.Common
|
{
|
/// <summary>
|
///对象实例操作类
|
/// </summary>
|
public class ComRefObj
|
{
|
/// <summary>
|
///构造对象实例操作类
|
/// </summary>
|
public ComRefObj(object Obj)
|
{
|
_Obj = Obj;
|
_Type = Obj.GetType();
|
_Attrs = _Type.GetProperties();
|
}
|
/// <summary>
|
///构造对象实例操作类
|
/// </summary>
|
public ComRefObj(Type Tp)
|
{
|
_Obj = Tp;
|
_Type = Tp;
|
_Attrs = _Type.GetProperties();
|
}
|
object _Obj;
|
Type _Type;
|
PropertyInfo[] _Attrs;
|
/// <summary>
|
/// 获取对象的属性值(不区分大小写属性名)
|
/// </summary>
|
/// <returns>属性值</returns>
|
public T GetAttr<T>(string Name)
|
{
|
return GetAttr(Name, default(T));
|
}
|
/// <summary>
|
/// 获取对象的属性值(不区分大小写属性名)
|
/// </summary>
|
/// <returns>属性值</returns>
|
public T GetAttr<T>(string Name, T DefaultValue)
|
{
|
Name = Name.ToLower();
|
var i = _Attrs.FirstOrDefault(it => it.Name.ToLower() == Name);
|
if (i == null) { return DefaultValue; }
|
return (T)i.GetValue(_Obj, null);
|
}
|
/// <summary>
|
/// 获取对象的属性值
|
/// </summary>
|
/// <returns>属性值</returns>
|
public T GetAttr<T>(string Name, bool IsIgnoreCase, T DefaultValue = default(T))
|
{
|
System.Reflection.PropertyInfo p;
|
if (IsIgnoreCase)
|
{
|
Name = Name.ToLower();
|
p = _Attrs.FirstOrDefault(t => t.Name.ToLower() == Name);
|
}
|
else
|
{
|
p = _Attrs.FirstOrDefault(t => t.Name == Name);
|
}
|
if (p == null) { return (T)DefaultValue; }
|
return (T)p.GetValue(_Obj, null);
|
}
|
/// <summary>
|
/// 获取对象的属性值
|
/// </summary>
|
/// <returns>属性值</returns>
|
public object GetAttr(string Name, bool IsIgnoreCase)
|
{
|
System.Reflection.PropertyInfo p;
|
if (IsIgnoreCase)
|
{
|
Name = Name.ToLower();
|
p = _Attrs.FirstOrDefault(t => t.Name.ToLower() == Name);
|
}
|
else
|
{
|
p = _Attrs.FirstOrDefault(t => t.Name == Name);
|
}
|
if (p == null) { return null; }
|
return p.GetValue(_Obj, null);
|
}
|
/// <summary>
|
/// 设置对象的属性值(不区分大小写属性名)
|
/// </summary>
|
/// <returns>自身</returns>
|
public ComRefObj SetAttr<T>(string Name, T Value)
|
{
|
Name = Name.ToLower();
|
var i = _Attrs.FirstOrDefault(it => it.Name.ToLower() == Name);
|
if (i != null) { i.SetValue(_Obj, Value, null); }
|
return this;
|
}
|
/// <summary>
|
/// 设置对象的属性值
|
/// </summary>
|
/// <returns>自身</returns>
|
public ComRefObj SetAttr<T>(string Name, T Value, bool IsIgnoreCase)
|
{
|
PropertyInfo p;
|
if (IsIgnoreCase)
|
{
|
Name = Name.ToLower();
|
p = _Attrs.FirstOrDefault(t => t.Name.ToLower() == Name);
|
}
|
else
|
{
|
p = _Attrs.FirstOrDefault(t => t.Name == Name);
|
}
|
if (p != null) { p.SetValue(_Obj, Value, null); }
|
return this;
|
}
|
/// <summary>
|
/// 设置模型(只操作属性方法和字段不操作)
|
/// </summary>
|
/// <typeparam name="MT">模型类型</typeparam>
|
/// <param name="Model">被读取属性值的模型</param>
|
/// <param name="NotSetNames">不设置的属性名</param>
|
/// <returns>自身</returns>
|
public ComRefObj Set<MT>(MT Model, string[] NotSetNames)
|
{
|
var pts = Model.GetType().GetProperties().ToDictionary(t => t.Name);
|
foreach (var n in NotSetNames)
|
{
|
if (pts.ContainsKey(n)) { pts.Remove(n); }
|
}
|
PropertyInfo gp;
|
foreach (var p in _Attrs)
|
{
|
if (pts.TryGetValue(p.Name, out gp))
|
{
|
p.SetValue(_Obj, gp.GetValue(Model, null), null);
|
}
|
}
|
return this;
|
}
|
}
|
}
|