Почему IEnumerable <struct> не может быть приведен как IEnumerable <object>?

Почему последняя строка не разрешена?

IEnumerable<double> doubleenumerable = new List<double> { 1, 2 };
IEnumerable<string> stringenumerable = new List<string> { "a", "b" };
IEnumerable<object> objects1 = stringenumerable; // OK
IEnumerable<object> objects2 = doubleenumerable; // Not allowed

Это потому, что double - это тип значения, который не является производным от объекта, следовательно, ковариация не работает?

Означает ли это, что нет способа заставить эту работу:

public interface IMyInterface<out T>
{
    string Method(); 
}

public class MyClass<U> : IMyInterface<U>
{
    public string Method()
    {
        return "test";
    }
}

public class Test
{
    public static object test2() 
    {
        IMyInterface<double> a = new MyClass<double>();
        IMyInterface<object> b = a; // Invalid cast!
        return b.Method();
    }
}

И это мне нужно написать самомуIMyInterface<T>.Cast<U>() сделать это?

Ответы на вопрос(3)

Ваш ответ на вопрос