Pergunta

Eu tenho uma aula semelhante à seguinte que usa uma lista interna:

public class MyList<T> : IEnumerable<T>
{
        private List<T> _lstInternal;
        public MyList()
        {
            _lstInternal = new List<T>();
        }
        public static implicit operator List<T>(MyList<T> toCast)
        {
            return toCast._lstInternal;
        }

}

Quando eu tento passar MyList<object> para uma função que leva um List<object>, Eu recebo um invalidcastException. Por quê?

Foi útil?

Solução

Usando a aula que você descreveu, o código a seguir funcionou para mim:

static void Main(string[] args)
{
   MyList<object> foo = new MyList<object>();

   MyMethod(foo);
}

static void MyMethod(List<object> things)
{
   // No InvalidCastException when called...
}

A única coisa que mudei do MyList<T> A classe que você postou em sua pergunta foi adicionar a seguinte implementação de IEnumerable<T>:

IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
    return _lstInternal.GetEnumerator();
}

IEnumerator IEnumerable.GetEnumerator()
{
    return _lstInternal.GetEnumerator();
}

Não tenho muita certeza de por que você está obtendo uma exceção, exceto como mencionei no meu comentário, estou usando o C# versão 4.0. Qual versão você está usando?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top