| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -225,26 +225,34 @@ namespace Apewer.Source | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (type == null) throw new ArgumentNullException(nameof(type)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 需要获取属性的类型。
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var types = new List<Type>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                var target = type; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 获取所有属性的名称,基类在前。
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var chian = new List<Type>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var current = type; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            while (true) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (target.Equals(RuntimeUtility.ObjectType)) break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    types.Add(target); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    target = target.BaseType; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (current.Equals(RuntimeUtility.ObjectType)) break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                chian.Add(current); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                current = current.BaseType; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 所有属性。
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var list = new List<PropertyInfo>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (var i = types.Count - 1; i >= 0; i--) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var names = new List<string>(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (var i = chian.Count - 1; i >= 0; i--) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                var declared = chian[i].GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                foreach (var property in declared) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (names.Contains(property.Name)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                var properties = types[i].GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                list.Add(properties); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        continue; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return list.ToArray(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    names.Add(property.Name); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // 获取所有属性。
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            var result = names.Map(n => properties.Find(p => p.Name == n)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            result = result.FindAll(p => p != null); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return result; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        #endregion
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |