Sử dụng phản chiếu Tôi có một đối tượng mà tôi cần đưa vào danh sách các mục có thể lặp lại (loại không xác định, sẽ là đối tượng). Sử dụng cửa sổ Watch tôi có thể thấy đối tượng của tôi là một mảng của một số loại vì nó cho tôi biết số lượng các phần tử và tôi có thể phát nổ chế độ xem dạng cây để tự xem các phần tử.Đối tượng C# thành mảng
Thứ nhất, tôi cần kiểm tra xem đối tượng đã truyền là một loại mảng nào đó (có thể là Danh sách, có thể là đối tượng [], v.v.). Sau đó, tôi cần phải lặp qua mảng đó. Tuy nhiên, tôi không thể thực hiện chuyển đổi loại.
Đây là cách tôi đang sử dụng nó (viết tắt):
private static void Example(object instance, PropertyInfo propInfo)
{
object anArray = propInfo.GetValue(instance, null);
ArrayList myList = anArray as ArrayList;
foreach (object element in myList)
{
// etc
}
}
tôi đã cố gắng dàn diễn viên khác nhau. Ở trên không tăng ngoại lệ nhưng danh sách của tôi là null khi anArray thực sự tồn tại và chứa các mục. Ví dụ thực tế được lưu là Danh sách <> được nhập mạnh mẽ nhưng có thể mất một tập hợp con các biểu mẫu có giới hạn nếu cần. Nhưng điểm của bài tập là phương thức Example() này không biết kiểu cơ bản của thuộc tính.
bạn có thể tìm hiểu các loại đối tưởng khỏi instance.GetType() và bạn có thể so sánh nó với loại desirebale sử dụng 'is', ví dụ 'if (instance.GetType() là IEnumerable)' – Tsar
@Bad Display Name bây giờ là cách hoạt động của từ khóa * là *, những gì bạn đang làm đang cố gắng truyền từ System.Type sang System.Collection.IEnumerable, mà không 't làm việc kể từ khi System.Type không thực hiện giao diện đó. có lẽ bạn có nghĩa là ** typeof (IEnumerable) .IsAssignableFrom (instance.GetType()) ** – MattDavey