c # 4.0: int реальный подтип объекта? ковариантность, ienumerable и типы значений

Интересно, почему IEnumerable не может быть назначен IEnumerable < объект> . В конце концов IEnumerable - один из немногих интерфейсов, поддерживающих ковариацию ...

  • Отношения подтипа и ковариация работают со ссылочными типами
  • int , кажется, правильный подтип ] object

Однако комбинация обеих функций не работает ...

class A
{
}

class B : A
{
}

class Program
{
    static void Main(string[] args)
    {
        bool b;
        b = typeof(IEnumerable<A>).IsAssignableFrom(typeof(List<B>));
        Console.WriteLine("ienumerable of ref types is covariant: " + b); //true

        b = typeof(IEnumerable<object>).IsAssignableFrom(typeof(List<int>));
        Console.WriteLine("ienumerable of value tpyes is covariant: " + b); //false

        b = typeof(object).IsAssignableFrom(typeof(int));
        Console.WriteLine("int is a subtype of object: " + b); //true
    }
}

спасибо за вашу помощь! sebastian

9
задан Dan Tao 24 March 2011 в 01:50
поделиться