public static List <GenericDataFieldAttribute> GetGenericDataFieldAttributes(GenericData obj = null, Type gtype = null, string name = null) { if (name != null) { var GTypes = Assembly.GetAssembly(typeof(GenericData)).GetTypes().Where(t => t.IsSubclassOf(typeof(GenericData))).ToList(); gtype = GTypes.First(x => x.Name == name); } var attrs = new List <GenericDataFieldAttribute>(); if (obj != null) { gtype = obj.GetType(); } if (gtype != null) { var props = gtype.GetProperties(); foreach (var pinfo in props) { var genericDataField = ((GenericDataFieldAttribute[])pinfo.GetCustomAttributes(typeof(GenericDataFieldAttribute), true)).FirstOrDefault(); if (genericDataField != null && !genericDataField.DisableGridEdit) { attrs.Add(genericDataField); } } } return(attrs); }