使用反射更改属性类型

时间:2014-02-07 16:43:52

标签: c# .net reflection

我的域类中有一个十进制Value属性:

public class Domain
{
   public decimal Value {get;set}
}

我需要为Value属性分配两个数据库值:

obj1.Value = decimal.Parse(reader["Value"].ToString());
obj2.Value = decimal.Parse(reader["Value2"].ToString());

比我有一个比较这两个属性的比较方法:

public void Compare(List<object> Domains)
{
     //get properties with reflection

     //if the properties values are different i need to set a 'string' value [DIFFERENT]           to it.       
     prop.SetValue(comparableObj, "[DIFFERENT]", null);
}

有可能吗?

2 个答案:

答案 0 :(得分:2)

这根本不可能。属性Value的类型在编译时设置为decimal,并且在运行时无法更改。相反,您需要专注于将string值转换为decimal值。那或为Domain.Value选择更合适的类型。

如果您转换路线,那么我建议您查看Convert.ToDecimal

等方法

答案 1 :(得分:1)

我认为在运行时更改属性的类型是不可能的。我知道如果可能的话,那将是一个坏主意。

你最好还有一个你存储比较结果的字段。然后你需要使用那个&#34; [DIFFERENT]&#34;值,检查存储结果的字段,然后使用它。