EDIT: This is now available in C# 7.0.C# chuyển đổi với các loại
Tôi có đoạn mã sau đây để kiểm tra một cho PropertyInfo
's type
.
PropertyInfo prop;
// init prop, etc...
if (typeof(String).IsAssignableFrom(prop.PropertyType)) {
// ...
}
else if (typeof(Int32).IsAssignableFrom(prop.PropertyType)) {
// ...
}
else if (typeof(DateTime).IsAssignableFrom(prop.PropertyType)) {
// ...
}
Có cách nào để sử dụng câu lệnh switch
trong trường hợp này không? Đây là giải pháp hiện tại của tôi:
switch (prop.PropertyType.ToString()) {
case "System.String":
// ...
break;
case "System.Int32":
// ...
break;
case "System.DateTime":
// ...
break;
default:
// ...
break;
}
Tôi không nghĩ rằng đây là giải pháp tốt nhất, bởi vì bây giờ tôi phải cung cấp cho các giá trị String
đầy đủ của type
nhất định. Có lời khuyên nào không?
tôi nghĩ rằng không có cách nào. Chuyển đổi hoạt động chủ yếu trên chuỗi, int và enum (int một lần nữa bheind hiện trường). Với được gán từ bạn có thể kiểm tra ngay cả loại thừa hưởng hình thức khác, với chuỗi này là definetly impossibile. – Skary
nếu các loại bạn đang làm việc chỉ là Int32, chuỗi và DateTime, nếu bạn có thể sử dụng == thay vì IsAssignableFrom (chúng được niêm phong lớp): nếu (prop.PropertyType == typeof (string) ... , bạn không thể sử dụng typeof (someClass) làm nhãn trường hợp, bạn cũng không thể sử dụng đối số Nhập làm đối số chuyển đổi Tôi sẽ ở lại nếu –
Có thể trùng lặp của [Có cách nào tốt hơn thay thế này để 'bật kiểu' không? ] (http://stackoverflow.com/questions/298976/is-there-a-better-alternative-than-this-to-switch-on-type) – Dmitry