Bạn có thể sử dụng trình chuyển đổi loại (không kiểm tra lỗi):
Ship ship = new Ship();
string value = "5.5";
var property = ship.GetType().GetProperty("Latitude");
var convertedValue = property.Converter.ConvertFrom(value);
property.SetValue(self, convertedValue);
Về mặt tổ chức mã, bạn có thể tạo một loại mixin sẽ dẫn đến mã như thế này:
Ship ship = new Ship();
ship.SetPropertyAsString("Latitude", "5.5");
Điều này sẽ đạt được với mã này:
public interface MPropertyAsStringSettable { }
public static class PropertyAsStringSettable {
public static void SetPropertyAsString(
this MPropertyAsStringSettable self, string propertyName, string value) {
var property = TypeDescriptor.GetProperties(self)[propertyName];
var convertedValue = property.Converter.ConvertFrom(value);
property.SetValue(self, convertedValue);
}
}
public class Ship : MPropertyAsStringSettable {
public double Latitude { get; set; }
// ...
}
MPropertyAsStringSettable
có thể được tái sử dụng cho nhiều lớp khác nhau.
Bạn cũng có thể tạo các trình chuyển đổi loại tùy chỉnh của riêng mình để đính kèm vào các thuộc tính hoặc các lớp của bạn:
public class Ship : MPropertyAsStringSettable {
public Latitude Latitude { get; set; }
// ...
}
[TypeConverter(typeof(LatitudeConverter))]
public class Latitude { ... }