When is it appropriate to use a fall-through (classic) switch statement? Is such usage recommended and encouraged or should it be avoided at all costs?
Appropriate uses of fall-through switch statements
switch statement
Here's an example where it would be useful.public Collection<LogItems> GetAllLogItems(Level level) {    Collection<LogItems> result = new Collection<LogItems>();    switch (level) {        // Note: fall through here is INTENTIONAL        case All:        case Info:             result.Add(GetItemsForLevel(Info));        case Warning:             result.Add(GetItemsForLevel(Warning));        case Error:             result.Add(GetItemsForLevel(Error));        case Critical:             result.Add(GetItemsForLevel(Critical));        case None:    }    return result;}This sort of thing (where one case includes the other) is rather rare, I think, which is why some newer languages either don't allow fallover or require special syntax for it.