使用反射将属性值与该值的字符串表示形式进行比较

时间:2012-11-15 00:37:32

标签: c# reflection

我已经搜索过并且已经接近了,但是我无法理解我接下来需要做的事情。所以我有一个函数,它接受我的对象和字符串。

字符串的格式为" property = value&#34 ;;所以我将=符号中的字符串分成2个字符串,prop和value。现在我想将我的对象中的相同属性与字符串进行比较。所以我有这样的事情:

  • 澄清编辑: 我想tostring()会起作用,我猜我所追求的是另一种方式。因为实际的属性值类型可能是bool,datetime,int或string(也许是其他的,但没有自定义对象)我认为我需要将值转换或转换为正确的类型并进行比较。

  • 第二次澄清。对于那些提出的问题,上下文是我尝试创建一个简单的用户可定义规则系统来评估数据。由于数据输入了我的人类,我最关心的是字符串表示其他类型我的不比较它们实际上是那些类型,例如1.00应该= 1.0如果它们是十进制类型但是如果它们赢了是字符串类型。

    private static bool evaluateCriteria(string s, Client o){
    
        bool evaluation = false;
    
        string prop = s.Split('=')[0];
        string value = s.Split('=')[1];
    
        var propvalue = (o).GetType().GetProperty(prop).GetValue(o, null);  
    
        //ok so not I want to compare value to propvalue, but don't know how
        // evaluation = (value == propvalue);
    
    
        return evaluation;
    
    }
    

3 个答案:

答案 0 :(得分:0)

将您的反射代码更改为:

var propvalue = (o).GetType().GetProperty(prop).GetValue(o, null).ToString();

如果您要查找的值采用特殊格式,则可能需要对其进行一些格式化以确保其格式匹配。

你可能还应该在问题中提供更多的背景信息,因为它对你想要实现的目标非常模糊,并且可能有更好的方法。

答案 1 :(得分:0)

你关心物业实际返回的类型吗?

如果它的结果​​是字符串,你应该可以做一些简单的事情,比如

return value == propvalue.ToString();

也许我错过了什么......

答案 2 :(得分:0)

我不确定你想要什么,但我认为是这样的。比较两个字符串值

return string.Compare(value, propvalue.ToString()) == 0;