Làm thế nào để viết một phương pháp đơn giản, kiểm tra xem một loại cụ thể là một cấu trúc tùy chỉnh (được tạo ra với public struct { };
) hay không.Làm thế nào để xác định xem một loại .NET là một cấu trúc tùy chỉnh?
Kiểm tra Type.IsValueType
là không đủ, bởi vì nó cũng đúng với int
, long
, vv, và thêm một tấm séc để !IsPrimitiveType
sẽ không loại trừ decimal
, DateTime
và có thể một số các loại giá trị khác. Tôi biết rằng hầu hết được xây dựng trong các loại giá trị thực sự "cấu trúc", nhưng tôi chỉ muốn kiểm tra cho "cấu trúc tùy chỉnh"
Những câu hỏi này chủ yếu là giống nhau nhưng mà không có câu trả lời tôi cần:
EDIT: từ các câu trả lời đề cập đến "kiểm tra cho 'hệ thống' tiền tố" là nhất ổn định (mặc dù nó vẫn là một hack). Cuối cùng tôi đã quyết định tạo ra một thuộc tính mà bạn phải trang trí cấu trúc, theo thứ tự khung để chọn nó như là một cấu trúc tùy chỉnh. (Sự lựa chọn khác tôi nghĩ là để tạo ra một giao diện trống rỗng, và để cho các cấu trúc thực hiện mà giao diện trống rỗng, nhưng cách thuộc tính có vẻ tao nhã hơn)
Dưới đây là bản gốc kiểm tra tùy chỉnh struct của tôi nếu ai đó nếu quan tâm:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum
Chỉ vì tò mò, tại sao bạn muốn phát hiện điều này? – Joren
Fluent NHibernate + Auto Mapping: đặt tất cả các cấu trúc tùy chỉnh được thực hiện thành các thành phần (đối tượng giá trị); thiết lập bất kỳ loại giá trị nào khác thành một thành phần (như DateTime, hoặc thập phân) sẽ làm hỏng toàn bộ khung công tác (ít nhất là dưới dạng đơn) – SztupY
Thêm vào! type.IsEnum –