Tôi đang truy xuất một số thuộc tính của điều khiển. Dưới đây là cách tôi sử dụng để lấy tài sản (với pinfo loại PropertyInfo):Nhận phản ánh giá trị của thuộc tính có getter có giá trị tùy chọn
value = pinfo.GetValue(obj, nothing)
Đó hoạt động tốt, nhưng bây giờ tôi đang phải đối mặt với một tài sản mà có một giá trị tùy chọn, và tôi nhận được một thông báo lỗi nói với tôi rằng số tham số không đúng. Vì vậy, tôi đã thay đổi mã của mình bằng cách này:
Dim index As Object() = {Nothing}
value = pinfo.GetValue(obj, index)
Tại thời điểm này, tôi không nhận được bất kỳ thông báo lỗi nào, nhưng mã này không lấy được giá trị tốt. Nó chỉ hoạt động nếu tôi thay thế Không có gì bằng giá trị mặc định được cung cấp bởi người truy cập thuộc tính ...
Nhưng tôi không biết trước giá trị mặc định này là gì! Và mã này là trong hàm truy xuất thuộc tính không có giá trị tùy chọn, vì vậy tôi không thể thay đổi mã đặc biệt cho trường hợp này hoặc trường hợp khác.
Bất kỳ ý tưởng nào? Tôi đang làm việc trên NET 2,0
EDIT: Nhiều hơn độ chính xác về trường hợp dẫn đến các vấn đề
Dưới đây là một ví dụ về tài sản dẫn đến các vấn đề:
ReadOnly Property Foo(Optional ByVal Number As Integer = -1) As String
Get
If Number = -1 Then
Return "Your number is the default number: " & Number
Else
Return "Your number is " & Number
End If
End Get
End Property
Với loại tài sản này, không có mã nào ở trên truy xuất chuỗi tốt.
đoán tốt nhất của tôi sẽ được thử mã đầu tiên cho các mục đích chung, nắm bắt những ngoại lệ thích hợp, và sau đó tự động lấy giá trị mặc định của tham số (Số trong trường hợp đó) và loại của nó, vì vậy mà tôi có thể gọi getValue
với giá trị mặc định này.
Vì vậy, Làm cách nào tôi có thể truy xuất giá trị mặc định của thông số tùy chọn?
Xin chào, thx đã trả lời, nhưng cú pháp của bạn không hoạt động đối với tôi ... Trình biên dịch không thích dấu ngoặc (.NET 2.0). Thêm vào đó, ví dụ của bạn sẽ không hoạt động đối với tôi, vì hàm của tôi phải lấy về tất cả các thuộc tính của một cá thể đối tượng, và nó được gọi cho nhiều đối tượng khác nhau – GianT971
Và dòng cuối cùng bạn viết tương tự với một trong các lần thử của tôi (khối thứ hai của mã trong câu hỏi của tôi) – GianT971
@ GianT971: Xin lỗi, bỏ lỡ bạn đang sử dụng .NET 2. Đã chỉnh sửa câu trả lời của tôi cho phù hợp. –