补充一个技术文章吧,否则真的对不起博客园时间: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; }