private static PerkObject[] GetAllPerks() { var perks = new HashSet <PerkObject>(); try { var all_po = PerkObject.All; if (all_po != null) { perks.AddRange(all_po, true); } } catch (NullReferenceException) { } try { var all_def = DefaultPerks.GetAllPerks(); if (all_def != null) { perks.AddRange(all_def, true); } } catch (NullReferenceException) { } var typeDefaultPerks = typeof(DefaultPerks); var typePerkObject = typeof(PerkObject); var classs = typeDefaultPerks.GetNestedTypes().Where(x => !x.IsGenericType && x.IsClass && x.IsAbstract && x.IsSealed); var fields = classs.SelectMany(x => x.GetProperties(BindingFlags.Public | BindingFlags.Static).Where(y => y.PropertyType == typePerkObject)).ToArray(); foreach (var item in fields) { object value; try { value = item.GetValue(null); } catch (TargetInvocationException e) { if (e.InnerException != null && e.InnerException is NullReferenceException) { continue; } throw e; } catch (NullReferenceException) { continue; } if (value != null && value is PerkObject perkObject) { perks.Add(perkObject); } } return(perks.ToArray()); }
static PerkObject[] GetAllPerks() { var perks = new HashSet <PerkObject>(); var all_po = PerkObject.All; if (all_po != null) { foreach (var item in all_po) { perks.Add(item); } } var all_def = DefaultPerks.GetAllPerks(); if (all_def != null) { foreach (var item in all_def) { perks.Add(item); } } var typeDefaultPerks = typeof(DefaultPerks); var typePerkObject = typeof(PerkObject); var classs = typeDefaultPerks.GetNestedTypes().Where(x => !x.IsGenericType && x.IsClass && x.IsAbstract && x.IsSealed); var fields = classs.SelectMany(x => x.GetProperties(BindingFlags.Public | BindingFlags.Static).Where(y => y.PropertyType == typePerkObject)).ToArray(); foreach (var item in fields) { var value = item.GetValue(null); if (value != null && value is PerkObject perkObject) { perks.Add(perkObject); } } return(perks.ToArray()); }