我的函数接收一个类型为object的参数'value'。我想将它分配给一个对象的成员,但是转换不是隐式发生的,所以我需要明确地指定它。但是,我不想在对象中实际指定该成员的当前类型,因此我可以这样做:
positiveOrder.OrderID = (int)value;
但是,如果业务需求发生变化并且OrderID以不同的方式生成和存储,例如包括对GUIDS的类型更改,我将不得不回到这里并进行更改,这是不合需要的凝聚力。我已尝试过各种代码排列,如
positiveOrder.OrderID = value as thisOrder.OrderID.GetType();
或
positiveOrder.OrderID = (typeof(thisOrder.OrderID)) value;
但似乎没有任何效果。有关以编程方式指定要转换为的类型的任何想法吗?它可以在编译时或运行时完成,因为Order类不会改变。
答案 0 :(得分:2)
如果positiveOrder.OrderID
始终是一个整数(即使用字符串表示),也不要将成员更改为整数。相反,暴露一些可以处理不同源类型的方法。
例如:
public void SetOrderID(object value)
{
this.OrderID = Convert.ToInt32(value);
}
答案 1 :(得分:0)
类似的东西:
using System.Reflection;
receiver.GetType().GetProperty(propName).SetValue(receiver, value, null);