Này, chúng tôi có 2 lớp:Tại sao Enumerable.Cast không sử dụng phôi do người dùng xác định?
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 };
}
}
Vậy tại sao
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
Cùng cho explicit
điều hành.
P.S .: đúc mỗi phần tử bằng tay (separetely) hoạt động
List<B> listB = listA.Select<A, B>(s => s).ToList(); //OK
Vì vậy, nó không thành công vì nó cố gắng truyền 'đối tượng' sang' B', trong khi tôi đã định nghĩa một diễn viên từ 'A' thành' B'? – horgh
Nó không thành công, bởi vì nó đầu tiên sẽ cần phải unbox 'object' thành' A' và hơn là cast. Một cái gì đó như '(B) (A) o'. Bạn có thể xác định một toán tử cast hoạt động trên 'object' thay vì' A' nhưng điều đó sẽ không có ý nghĩa vì hầu hết các cá thể 'object' sẽ không thể chuyển đổi được. –
Nhưng nó là một 'Danh sách' trong đó 'T' là' A'. Nó không phải là một 'ArrayList' hoặc 'List