【问题标题】:Change property type using reflection使用反射更改属性类型
【发布时间】:2014-02-07 16:43:52
【问题描述】:

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

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);
}

可以吗?

【问题讨论】:

  • 这与类型安全语言完全相反。你不能那样做。

标签: c# .net reflection


【解决方案1】:

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

如果你走转换路线,那么我建议你看看像Convert.ToDecimal这样的方法

【讨论】:

    【解决方案2】:

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

    您最好使用另一个字段来存储比较结果。然后当您需要使用该“[DIFFERENT]”值时,请检查您存储结果的字段,并改用它。

    【讨论】:

    • 亲爱的柯蒂斯,您介意为您的解决方案分享一个 sn-p 代码吗?我相信那将是最富有成效的。谢谢
    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多