Dường như bạn đang hỏi hai câu hỏi khác nhau: một loại có phải là một mảng hay không (ví dụ: string[]
) hoặc bất kỳ loại bộ sưu tập nào.
Đối với trường hợp cũ, chỉ cần kiểm tra property.PropertyType.IsArray
.
Đối với trường hợp thứ hai, bạn phải quyết định tiêu chí tối thiểu bạn muốn loại phù hợp. Ví dụ: bạn có thể kiểm tra số không chung chung IEnumerable
bằng cách sử dụng typeof(IEnumerable).IsAssignableFrom(property.PropertyType)
. Bạn cũng có thể sử dụng điều này cho các giao diện chung nếu bạn biết loại T thực tế, ví dụ: typeof(IEnumerable<int>).IsAssignableFrom(property.PropertyType)
.
Kiểm tra chung IEnumerable<T>
hoặc bất kỳ giao diện chung nào khác mà không biết giá trị của T có thể được thực hiện bằng cách kiểm tra xem property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName)
không phải là null
. Lưu ý rằng tôi đã không chỉ định bất kỳ loại nào cho T
trong mã đó. Bạn có thể làm tương tự cho IList<T>
hoặc bất kỳ loại khác mà bạn đang quan tâm đến
Ví dụ, bạn có thể sử dụng sau đây nếu bạn muốn kiểm tra sự chung IEnumerable<T>
:.
public bool IsPropertyACollection(PropertyInfo property)
{
return property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName) != null;
}
Mảng cũng thực hiện IEnumerable, vì vậy họ cũng sẽ trả lại true
từ phương thức đó.
Vì vậy, bạn có nghĩa là, nếu thuộc tính là tập hợp? Những điều phù hợp với bình luận của bạn không phải là mảng. –
Bạn có thể có nghĩa là 'IEnumerable' thay vì' IEnumerator'? – Groo
@Ben: Vâng, mảng phù hợp với tiêu chí của mình (IList và IEnumerable ), nhưng không phải tất cả mọi thứ phù hợp với tiêu chí của anh đều là mảng.:) –
Sven