// In
"a".In("a", "b", "c").Should().BeTrue();
"d".In("a", "b", "c").Should().BeFalse();
// ForAll
var coll = new[] {"a", "b", "c"};
coll.ForAll(x => Console.WriteLine(x));
var collection = new DelegatedTopologicallySortedCollection<string, Person>(
x => x.Name,
x => x.Requires);
collection.IsReadOnly.Should().BeFalse();
collection.Add(new Person {Name = "A"});
collection.Add(new Person {Name = "E", Requires = new[] {"D"}});
collection.Add(new Person {Name = "B", Requires = new[] {"A"}});
collection.Add(new Person {Name = "D", Requires = new[] {"C"}});
collection.Add(new Person {Name = "C", Requires = new[] {"B"}});
var items = collection.ToArray();
items[0].Name.Should().Be("A");
items[1].Name.Should().Be("B");
items[2].Name.Should().Be("C");
items[3].Name.Should().Be("D");
items[4].Name.Should().Be("E");