Why is list of structs not IEnumerable<object>?

34 Views Asked by At

Running the below program gives the following output:

Class is object. Class list is IEnumerable<object>.
Struct is object. Struct list is not IEnumerable<object>.

That implies that a struct instance is an object but that a list of struct instances is not IEnumerable<object>. Why is that so?

using System;
using System.Collections.Generic;

public class Program
{
    public struct MyStruct
    {}
    
    public class MyClass
    {}
    
    public static void Main()
    {
        // Check if a class instance is an object
        MyClass classInstance = new MyClass();
        if (classInstance is object) Console.WriteLine("Class is object.");
        else Console.WriteLine("Class is no object.");
        
        // Check if a list of class instances is IEnumerable<object>
        List<MyClass> classList = new List<MyClass>() {classInstance};
        if (classList is IEnumerable<object>) Console.WriteLine("Class list is IEnumerable<object>");
        else Console.WriteLine("Class list is not IEnumerable<object>");

        // Check if a struct instance is an object
        MyStruct structInstance = new MyStruct();
        if (structInstance is object) Console.WriteLine("Struct is object.");
        else Console.WriteLine("Struct is no object.");
        
        // Check if a list of structs is IEnumerable<object>
        List<MyStruct> structList = new List<MyStruct>() {structInstance};
        if (structList is IEnumerable<object>) Console.WriteLine("Struct list is IEnumerable<object>");
        else Console.WriteLine("Struct list is not IEnumerable<object>");       
        
        Console.ReadLine();
    }
}
0

There are 0 best solutions below