动态确定要转换为的类型(C#)

时间:2012-07-06 12:40:52

标签: c# dynamic casting compile-time

我的函数接收一个类型为object的参数'value'。我想将它分配给一个对象的成员,但是转换不是隐式发生的,所以我需要明确地指定它。但是,我不想在对象中实际指定该成员的当前类型,因此我可以这样做:

positiveOrder.OrderID = (int)value;

但是,如果业务需求发生变化并且OrderID以不同的方式生成和存储,例如包括对GUIDS的类型更改,我将不得不回到这里并进行更改,这是不合需要的凝聚力。我已尝试过各种代码排列,如

positiveOrder.OrderID = value as thisOrder.OrderID.GetType();

positiveOrder.OrderID = (typeof(thisOrder.OrderID)) value;

但似乎没有任何效果。有关以编程方式指定要转换为的类型的任何想法吗?它可以在编译时或运行时完成,因为Order类不会改变。

2 个答案:

答案 0 :(得分:2)

如果positiveOrder.OrderID始终是一个整数(即使用字符串表示),也不要将成员更改为整数。相反,暴露一些可以处理不同源类型的方法。

例如:

public void SetOrderID(object value)
{
    this.OrderID = Convert.ToInt32(value);
}

请参阅Convert.ToInt32()

答案 1 :(得分:0)

类似的东西:

using System.Reflection;

receiver.GetType().GetProperty(propName).SetValue(receiver, value, null);