decir, que tienen 2 clases:¿Por qué Enumerable.Cast no utiliza moldes definidos por el usuario?
public class A
{
public int a;
}
public class B
{
public int b;
public static implicit operator B(A x)
{
return new B { b = x.a };
}
}
Entonces, ¿por
A a = new A { a = 0 };
B b = a; //OK
List<A> listA = new List<A> { new A { a = 0 } };
List<B> listB = listA.Cast<B>().ToList(); //throws InvalidCastException
Lo mismo para explicit
operador.
P.S .: fundición cada elemento manualmente (separetely) funciona
List<B> listB = listA.Select<A, B>(s => s).ToList(); //OK
Entonces, ¿falla porque intenta lanzar 'object' a' B', mientras que yo definí un molde de 'A' a' B'? – horgh
No funciona, porque primero necesitaría desempaquetar el 'objeto' en una' A' y luego hacer el molde. Algo como '(B) (A) o'. Podría definir un operador de conversión que trabaje en 'objeto' en lugar de' A', pero eso no tendría sentido ya que la mayoría de las instancias de 'objeto' no serían convertibles. –
Pero es una 'Lista' donde 'T' es' A'. No es un 'ArrayList' o' List