dire che abbiamo 2 classi:Perché Enumerable.Cast non utilizza i cast definiti dall'utente?
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 };
}
}
Allora perché
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 stesso per explicit
dell'operatore.
P.S .: colata ciascun elemento manualmente (separetely) funziona
List<B> listB = listA.Select<A, B>(s => s).ToList(); //OK
Quindi, fallisce perché prova a lanciare 'object' su' B', mentre ho definito un cast da 'A' a' B'? – horgh
Fallisce, perché prima avrebbe bisogno di unbox l'oggetto 'a un' A' e di fare il cast. Qualcosa come '(B) (A) o'. Potresti forse definire un operatore di cast che funziona su 'object' invece che su' A', ma non avrebbe senso dato che la maggior parte delle istanze 'object' non sarebbero convertibili. –
Ma è un 'Elenco' dove 'T' è' A'. Non è un 'ArrayList' o' Lista