2012-03-18 33 views
9

Tôi đang cố gắng có được loại tài sản của lớp học của tôi bằng cách sử dụng sự phản ánh nhưng nó trả về RuntimePropertyInfo duy nhất của tôi - như một tên của một loại.Nhận loại sử dụng phản chiếu

Tôi có đối tượng MyObject actualData - nó có chứa bất động sản - "Tên" như chuỗi và "Item" as type DatumType tôi

Khi tôi gỡ lỗi tôi có thể thấy, đó actualData có 2 thuộc tính, thứ nhất là loại chuỗi và thứ hai là DatumType, nhưng khi tôi sử dụng này:

string typeName = actualData.getType().getProperty("Item").getType().Name - nó trả tôi RuntimePropertyInfo, không DatumType

bạn có thể xem những gì tôi làm sai? Tôi đang sử dụng C# - .Net 4.0. Cảm ơn rất nhiều!

+0

C# phân biệt chữ hoa chữ thường. Những gì bạn đã bao gồm trong câu hỏi của bạn không thể là những gì bạn đã thực sự cố gắng. – hvd

+0

bạn đang đùa tôi à? : D không có thats cho chắc chắn không phải là vấn đề –

+0

Tôi đã không nói đó là vấn đề. Lưu ý cách tôi đưa nhận xét này dưới dạng nhận xét chứ không phải là câu trả lời? Nhưng nếu bạn không bao gồm mã bạn thực sự đã thử, chúng tôi sẽ không biết liệu bạn đã thử chỉ cố định vốn hóa hay đã có những thay đổi khác. – hvd

Trả lời

13

Bạn đang nhận được loại đối tượng PropertyInfogetProperty() trả về. Hãy thử

string typeName = actualData.getType().getProperty("Item").PropertyType.Name; 

Nếu bạn muốn loại giá trị hiện giao cho các đối tượng thông qua đối tượng PropertyInfo, bạn có thể gọi:

string typeName = actualData.getType().getProperty("Item").GetValue(actualData, null).GetType().Name; 

Nhưng trong trường hợp đó bạn cũng có thể chỉ cần gọi:

string typeName = actualData.Item.GetType().Name; 
+0

nó trả về tôi chỉ - "Đối tượng" như một tên kiểu –

+1

Thuộc tính có thể được định nghĩa là 'đối tượng', nhưng có giá trị' DatumType' được gán cho nó. GetProperty chỉ trả về kiểu được xác định, không phải kiểu giá trị hiện tại. Bất kỳ loại nào cũng có thể được gán cho thuộc tính của kiểu 'đối tượng'. Bạn nên sử dụng 'PropertyInfo' và gọi' GetValue() 'trên nó để lấy kiểu giá trị được gán. –

+0

vậy có cách nào để lấy loại này không? Bởi vì nếu tôi nhìn vào gỡ lỗi trên actualData - Tôi có thể thấy rằng Item là DatumType, chỉ phản ánh trả về cho tôi cái gì khác –

1

actualData.getType().getProperty("Item") 

truy xuất nội dung nào đó thuộc loại PropertyInfo.

Nếu bạn sau đó yêu cầu cho loại hình của nó:

actualData.getType().getProperty("Item").getType() 

bạn nhận được chính xác những gì bạn quan sát bạn nhận được.

Tôi nghi ngờ điều này là getType() trước là không cần thiết.

Chỉnh sửa: ai đó đã downvoted câu trả lời này là không công bằng imho. Câu hỏi là "Bạn có thể thấy tôi đang làm gì sai?" và câu trả lời là getType quá xa là câu trả lời đúng. Tìm kiếm PropertyType trong PropertyInfo sau đó sẽ dễ dàng nếu người hỏi biết những gì anh ta đang làm sai.

Đối với người đã downvoted câu trả lời này: xin vui lòng ít nhất để lại nhận xét lần sau khi bạn downvote một cái gì đó. Stackoverflow có ý nghĩa chỉ khi chúng ta học hỏi lẫn nhau, không chỉ bash mọi người xung quanh.

1

GetType() luôn trả về loại đối tượng hiện tại, không phải đối tượng nhọn.

Trong trường hợp của bạn, hãy xem xét sử dụng string typeName = actualData.getType().getProperty("Item").PropertyType.Name

+0

Không hoạt động. Ví dụ, nếu thuộc tính là một Nullable (Of Date), trả về "Nullable'1". Chỉ hoạt động đối với các thuộc tính chuỗi. – Pachanka

Các vấn đề liên quan