补充一个技术文章吧,否则真的对不起博客园

时间:2022-11-23 20:25:56
补充一个技术文章吧,否则真的对不起博客园补充一个技术文章吧,否则真的对不起博客园         /// <summary> 较安全的返回指定属性的值 </summary>
补充一个技术文章吧,否则真的对不起博客园        
/// <remarks>
补充一个技术文章吧,否则真的对不起博客园        
/// 例如,如果你想获得Company的CompanyCode的DefaultCode属性,可以使用
补充一个技术文章吧,否则真的对不起博客园        
/// <code>
补充一个技术文章吧,否则真的对不起博客园        
/// object code = _company.SafeGetValue("CompanyCode.DefaultCode");
补充一个技术文章吧,否则真的对不起博客园        
/// </code>
补充一个技术文章吧,否则真的对不起博客园        
/// 但注意:
补充一个技术文章吧,否则真的对不起博客园        
///        传入的参数(属性名)不允许书写错误,在此方法中不对此进行检查;
补充一个技术文章吧,否则真的对不起博客园        
/// </remarks>

补充一个技术文章吧,否则真的对不起博客园         public   object  SafeGetValue( string  propertyName)
补充一个技术文章吧,否则真的对不起博客园补充一个技术文章吧,否则真的对不起博客园        
{
补充一个技术文章吧,否则真的对不起博客园            
string[] props = propertyName.Split('.');
补充一个技术文章吧,否则真的对不起博客园            
string propName;
补充一个技术文章吧,否则真的对不起博客园            PropertyInfo propInfo;
补充一个技术文章吧,否则真的对不起博客园            
object obj = this;
补充一个技术文章吧,否则真的对不起博客园            Type objType;
补充一个技术文章吧,否则真的对不起博客园
补充一个技术文章吧,否则真的对不起博客园            
for (int i = 0; i < props.Length; i++)
补充一个技术文章吧,否则真的对不起博客园补充一个技术文章吧,否则真的对不起博客园            
{
补充一个技术文章吧,否则真的对不起博客园                objType 
= obj.GetType();
补充一个技术文章吧,否则真的对不起博客园
补充一个技术文章吧,否则真的对不起博客园                propName 
= props[i];
补充一个技术文章吧,否则真的对不起博客园                
if (propName.Trim().Length == 0)
补充一个技术文章吧,否则真的对不起博客园                    
throw new ArgumentException("propertyName");
补充一个技术文章吧,否则真的对不起博客园
补充一个技术文章吧,否则真的对不起博客园                
try
补充一个技术文章吧,否则真的对不起博客园补充一个技术文章吧,否则真的对不起博客园                
{
补充一个技术文章吧,否则真的对不起博客园                    propInfo 
= objType.GetProperty(propName);
补充一个技术文章吧,否则真的对不起博客园                    
if (propInfo == null)
补充一个技术文章吧,否则真的对不起博客园                        
throw new ArgumentException("propertyName");
补充一个技术文章吧,否则真的对不起博客园
补充一个技术文章吧,否则真的对不起博客园                    obj 
= propInfo.GetValue(obj, null);
补充一个技术文章吧,否则真的对不起博客园                }

补充一个技术文章吧,否则真的对不起博客园                
catch (AmbiguousMatchException)
补充一个技术文章吧,否则真的对不起博客园补充一个技术文章吧,否则真的对不起博客园                
{
补充一个技术文章吧,否则真的对不起博客园                    PropertyDescriptorCollection propDescs 
= TypeDescriptor.GetProperties(objType);
补充一个技术文章吧,否则真的对不起博客园                    PropertyDescriptor propDesc 
= propDescs.Find(propName, false);
补充一个技术文章吧,否则真的对不起博客园                    
if (propDesc == null)
补充一个技术文章吧,否则真的对不起博客园                        
throw new ArgumentException("propertyName");
补充一个技术文章吧,否则真的对不起博客园                    
else
补充一个技术文章吧,否则真的对不起博客园补充一个技术文章吧,否则真的对不起博客园                    
{
补充一个技术文章吧,否则真的对不起博客园                        obj 
= propDesc.GetValue(obj);
补充一个技术文章吧,否则真的对不起博客园                    }

补充一个技术文章吧,否则真的对不起博客园                }

补充一个技术文章吧,否则真的对不起博客园
补充一个技术文章吧,否则真的对不起博客园                
if (obj == null)
补充一个技术文章吧,否则真的对不起博客园                    
return null;
补充一个技术文章吧,否则真的对不起博客园            }

补充一个技术文章吧,否则真的对不起博客园            
return obj;
补充一个技术文章吧,否则真的对不起博客园        }