using System; using System.Collections; using System.Collections.Generic; namespace D21._1 { public class Inventory : IEnumerable { public Item Item; public Inventory NextEntry; public int Count() where T : Item => (NextEntry?.Count() ?? 0) + (Item is T ? 1 : 0); public override int GetHashCode() => HashCode.Combine(Item, NextEntry); public bool Contains(Item i) { var cur = this; while (cur != null) { if (i.Equals(cur.Item)) return true; cur = cur.NextEntry; } return false; } public IEnumerator GetEnumerator() { var cur = this; while (cur != null) { yield return cur.Item; cur = cur.NextEntry; } } IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException(); } public abstract class Item { public string Name { get; set; } public int Damage { get; set; } public int Armor { get; set; } public override bool Equals(object obj) => obj is Item item && Name.Equals(item.Name, StringComparison.OrdinalIgnoreCase); public override int GetHashCode() => HashCode.Combine(Name); } public class Weapon : Item { } public class Armor : Item { } public class Ring : Item { } }