Có cách nào để xác định xem đối tượng có phải là danh sách chung không? Tôi sẽ không biết loại danh sách, tôi chỉ biết đó là một danh sách. Làm thế nào tôi có thể xác định điều đó?Nếu đối tượng là Danh sách chung
Trả lời
này sẽ trở về "True"
List<int> myList = new List<int>();
Console.Write(myList.GetType().IsGenericType && myList is IEnumerable);
Bạn có quan tâm để biết nếu nó chính xác là một "List" ... hay là bạn ok với nó là IEnumerable, và chung?
Có một hàm GetType() trong lớp System.Object. Bạn đã thử chưa
tổ chức sự kiện dù có lẽ đây không phải là một "hoàn hảo" câu trả lời, tôi không thể hiểu tại sao nó được gắn cờ trừ một.Thôi nào, đó không phải là câu trả lời tốt nhất có thể nhưng cố gắng không làm hỏng danh tiếng của ai đó. –
GetType sẽ trả về danh sách chung chung cụ thể mà nó là, trái ngược với thực tế rằng nó chỉ là một danh sách chung chung. – Dested
Hãy thử:
if(yourList.GetType().IsGenericType)
{
var genericTypeParams = yourList.GetType().GetGenericArguments;
//do something interesting with the types..
}
Phương pháp sau sẽ trả về loại mục của loại bộ sưu tập chung. Nếu loại không thực hiện ICollection <> sau đó null được trả về.
static Type GetGenericCollectionItemType(Type type)
{
if (type.IsGenericType)
{
var args = type.GetGenericArguments();
if (args.Length == 1 &&
typeof(ICollection<>).MakeGenericType(args).IsAssignableFrom(type))
{
return args[0];
}
}
return null;
}
Edit: Các giải pháp trên giả định rằng các loại quy định có một tham số chung của riêng nó. Điều này sẽ không làm việc với nhiều loại mà thực hiện ICollection <> với một tham số generic cứng mã hóa, ví dụ:
class PersonCollection : List<Person> {}
Đây là một thực hiện mới mà sẽ xử lý trường hợp này.
static Type GetGenericCollectionItemType(Type type)
{
return type.GetInterfaces()
.Where(face => face.IsGenericType &&
face.GetGenericTypeDefinition() == typeof(ICollection<>))
.Select(face => face.GetGenericArguments()[0])
.FirstOrDefault();
}
Câu hỏi không rõ ràng.
Câu trả lời tùy thuộc vào ý bạn trong danh sách chung.
Một Danh sách <SomeType>?
Lớp học có nguồn gốc từ Danh sách <SomeType>?
Một lớp mà thực hiện IList <SomeType> (trong trường hợp một mảng có thể được coi là một danh sách chung - ví dụ int [] thực hiện IList <int>)?
Lớp học chung chung và triển khai IEnumerable (đây là bài kiểm tra được đề xuất trong accepted answer)? Nhưng điều này cũng sẽ xem xét các lớp bệnh lý thay vì sau đây là danh sách chung:
.
public class MyClass<T> : IEnumerable
{
IEnumerator IEnumerable.GetEnumerator()
{
return null;
}
}
Giải pháp tốt nhất (ví dụ: sử dụng GetType, IsAssignableFrom, v.v.) sẽ tùy thuộc vào ý bạn.
Câu trả lời được chấp nhận không đảm bảo loại IList <>. Kiểm tra phiên bản này, nó làm việc cho tôi:
private static bool IsList(object value)
{
var type = value.GetType();
var targetType = typeof (IList<>);
return type.GetInterfaces().Any(i => i.IsGenericType
&& i.GetGenericTypeDefinition() == targetType);
}
- 1. List.Contains (mục) với danh sách chung của các đối tượng
- 2. Ràng buộc Guice cho Danh sách các đối tượng chung
- 3. là-điều hành trong danh sách chung
- 4. Xóa danh sách các đối tượng khỏi danh sách khác
- 5. Lưu trữ Danh sách các đối tượng
- 6. Danh sách chung/Từ điển
- 7. Kiểm tra xem đối tượng có phải là danh sách các danh sách trong python không?
- 8. Loại danh sách chung của tôi là một danh sách hay chỉ là một mục?
- 9. Có danh sách đối tượng chung nào triển khai IDisposable cho câu lệnh sử dụng không?
- 10. String.Join trên danh sách các đối tượng
- 11. Xóa đối tượng khỏi danh sách đối tượng trong python
- 12. Làm thế nào để đưa một đối tượng vào danh sách loại chung trong F #
- 13. Một danh sách chung của generics
- 14. Thêm đối tượng để đầu Danh sách chung <T>
- 15. In danh sách các đối tượng
- 16. danh sách các đối tượng để Collections.map
- 17. Thêm đối tượng vào danh sách python
- 18. Lặp qua đối tượng JSON Danh sách
- 19. Lập danh sách các đối tượng thực hiện một giao diện chung, với JaxB
- 20. Cách tham gia danh sách chung các đối tượng trên một thuộc tính cụ thể
- 21. Cách sắp xếp loại danh sách chung chung nếu có nhiều thuộc tính?
- 22. Danh sách đối tượng trong httpcontext.current.cache
- 23. Nhiều đối tượng trong danh sách, C#
- 24. Phương thức thực hiện cho từng đối tượng trong danh sách chung bằng lambda
- 25. Lấy sự khác biệt đối xứng từ danh sách chung
- 26. Nhập danh sách xem danh sách từ danh sách đối tượng
- 27. Detect nếu một đối tượng là trống
- 28. danh sách chung đơn giản trong java
- 29. Cách Pythonic để tìm tiền tố chung dài nhất của danh sách danh sách là gì?
- 30. Khởi tạo đối tượng chung từ System.Type
Điều này hiện không biên dịch. https://dotnetfiddle.net/T0Q8w3. Có lẽ nó đã làm trong '08. – sonicblis
Hey @sonicblis, "IEnumerable" nằm trong không gian tên "System.Collections". Bạn không có một 'bằng cách sử dụng System.Collections;' trong fiddle của bạn. Vẫn biên soạn vào năm 2016 :) –
@Timothy_Khouri, ah, hiểu rồi. Cảm ơn con trỏ. – sonicblis