public SkillSet(FieldReader reader)
 {
     foreach (var prop in this.GetType().GetProperties())
     {
         prop.SetValue(this, ObjectMaterializer.Create <Skill>(reader, prop.Name));
     }
 }
        public CharacterSheet(FieldReader reader)
        {
            ObjectMaterializer.Populate(this, reader, 0);

            Classes = Enumerable.Range(1, 5)
                      .Select(x => ObjectMaterializer.Create <Class>(reader, x))
                      .Where(x => !x.IsNull)
                      .ToList();


            STR = ObjectMaterializer.Create <AbilityScore>(reader, $"{nameof(STR)}");
            DEX = ObjectMaterializer.Create <AbilityScore>(reader, $"{nameof(DEX)}");
            CON = ObjectMaterializer.Create <AbilityScore>(reader, $"{nameof(CON)}");
            INT = ObjectMaterializer.Create <AbilityScore>(reader, $"{nameof(INT)}");
            WIS = ObjectMaterializer.Create <AbilityScore>(reader, $"{nameof(WIS)}");
            CHA = ObjectMaterializer.Create <AbilityScore>(reader, $"{nameof(CHA)}");

            Skills = new SkillSet(reader);

            Feats = Enumerable.Range(1, 30)
                    .Select(x => reader.GetField <string>($"FeatFeatures_{x:00}"))
                    .Where(x => !string.IsNullOrWhiteSpace(x))
                    .ToList();

            AD_Combat_Notes = Enumerable.Range(1, 10)
                              .Select(x => reader.GetField <string>($"AD_Combat_Notes_{x:00}"))
                              .Where(x => !string.IsNullOrWhiteSpace(x))
                              .ToList();

            Weapons = Enumerable.Range(1, 5)
                      .Select(x => ObjectMaterializer.Create <Weapon>(reader, x))
                      .Where(x => !x.IsNull)
                      .ToList();

            FeatsSpecials = Enumerable.Range(1, 20)
                            .Select(x => ObjectMaterializer.Create <FeatsSpecial>(reader, $"{x:00}"))
                            .Where(x => !x.IsNull)
                            .ToList();

            EquipmentItems = Enumerable.Range(1, 54)
                             .Select(x => ObjectMaterializer.Create <EquipmentItem>(reader, $"{x:00}"))
                             .Where(x => !x.IsNull)
                             .ToList();

            Containers = Enumerable.Range(1, 4)
                         .Select(x => ObjectMaterializer.Create <Container>(reader, $"{x:00}"))
                         .Where(x => !x.IsNull)
                         .ToList();

            Treasures = Enumerable.Range(1, 4)
                        .Select(x => ObjectMaterializer.Create <Treasure>(reader, $"{x:00}"))
                        .Where(x => !x.IsNull)
                        .ToList();

            Casters = Enumerable.Range(1, 2)
                      .Select(x => ObjectMaterializer.Create <Caster>(reader, $"{x:0}"))
                      .ToList();

            Spells = Enumerable.Range(1, 354)
                     .Select(x => ObjectMaterializer.Create <Spell>(reader, $"{x:000}"))
                     .Where(x => !x.IsNull)
                     .ToList();
        }