Cố gắng tạo hai từ điển của các đại biểu được phát ra để cho phép cải thiện hiệu suất khi tự động nhận/thiết lập các giá trị của thuộc tính.Không thể liên kết với phương pháp đích khi tạo đại biểu cho các thuộc tính
Code:
Properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.CanRead && !p.GetIndexParameters().Any())
.AsEnumerable();
PropertyGetters = Properties.ToDictionary(p => p.Name, p => (Func<object, object>)Delegate.CreateDelegate(typeof(Func<object, object>), p.GetGetMethod()));
PropertySetters = Properties.Where(p => p.GetSetMethod() != null)
.ToDictionary(p => p.Name, p => (Action<object, object>)Delegate.CreateDelegate(typeof(Action<object, object>), p.GetSetMethod()));
Tuy nhiên tôi nhận được ngoại lệ sau đây:
Không thể liên kết với các phương pháp mục tiêu vì chữ ký của mình, an ninh minh bạch là không tương thích với điều đó của các loại đại biểu.
Từ những gì tôi đã đọc điều này sẽ được gây ra bởi các thuộc tính tĩnh/lập chỉ mục/kiểu giá trị, bộ sưu tập Properties
không chứa các thuộc tính tĩnh hoặc lập chỉ mục nhưng tuy nhiên tôi cần điều này để làm việc cho loại giá trị tài sản như int
và double
.
Làm cách nào để tạo các getters/setters mà tôi cần trong khi vẫn giữ mã của mình trừu tượng và tránh các generics?
Làm cách nào để bạn tạo 'Thuộc tính'? Và khi nào bạn nhận được ngoại lệ này? –
Đã thêm định nghĩa tập hợp thuộc tính vào mã được bao gồm, tôi nhận được ngoại lệ khi mã được thực thi trên một loại. –
Bạn có thể muốn thêm dòng mã này, nơi bạn nhận được một ngoại lệ. nó cũng sẽ giúp hiểu, làm thế nào bạn sẽ sử dụng những từ điển đó. –