using System.Collections;
using System.Collections.Generic;
private static void PrintCount(object obj, string objName)
var countProp = obj.GetType().GetProperty("Count");
var lengthProp = obj.GetType().GetProperty("Length");
if (lengthProp is not null)
var length = lengthProp.GetValue(obj);
Console.WriteLine($"{objName, -24} Length = {length}");
Console.WriteLine($"{objName} has no Count or Length property.");
var count = countProp.GetValue(obj);
Console.WriteLine($"{objName,-25} Count = {count}");
public static void Main()
var array = Array.Empty<int>();
var arrayList = new ArrayList();
var bitArray = new BitArray(0);
var dictionary = new Dictionary<int, int>();
var hashSet = new HashSet<int>();
var linkedList = new LinkedList<int>();
var list = new List<int>();
var priorityQueue = new PriorityQueue<int, int>();
var queue = new Queue<int>();
var sortedDictionary = new SortedDictionary<int, int>();
var sortedSet = new SortedSet<int>();
var stack = new Stack<int>();
var lookup = dictionary.ToLookup(k => k, k => k);
PrintCount(array, "Array<int>");
PrintCount(arrayList, "ArrayList");
PrintCount(bitArray, "BitArray");
PrintCount(dictionary, "Dictionary<int,int>");
PrintCount(hashSet, "HashSet<int>");
PrintCount(linkedList, "LinkedList<int>");
PrintCount(list, "List<int>");
PrintCount(priorityQueue, "PriorityQueue<int,int>");
PrintCount(queue, "Queue<int>");
PrintCount(sortedDictionary, "SortedDictionary<int,int>");
PrintCount(sortedSet, "SortedSet<int>");
PrintCount(stack, "Stack<int>");
PrintCount(lookup, "Lookup<int,int>");
PrintCount(str, "string");