C# fundição implícita para listar Retorna erro de tempo de execução
-
26-09-2019 - |
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ê?
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