WYB
2021-03-22 91b8cdad021ab052e4991f3d41834a6f0ddc36b8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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;
        }
    }
}