0

我有一个类名 DB.IFCArray,其中有很多字段(名称、描述等),我想实现一个转到 DB.IFCArray.field 的函数并做一些事情..

public static bool if_is_a(DB.IFCArray object1, string field, string value)
        {            
            if (object1.field == value) // this ofc not working, but hope you get the idea
            return true;

            return false;
         }
4

2 回答 2

1

你当然可以使用反射

//get the property indicated by parameter 'field'
//Use 'GetField' here if they are actually fields as opposed to Properties
//although the merits of a public field are dubious...
       var prop = object1.GetType().GetProperty(field);
//if it exists
        if (prop!=null)
        {
          //get its value from the object1 instance, and compare
          //if using Fields, leave out the 'null' in this next line:
          var propValue = prop.GetValue(object1,null);

          if (propValue==null) return false;
          return propValue;
        }
        else
        {
          //throw an exception for property not found
        }

但正如上面提到的 CodeCaster,我建议你看看你的设计,看看这是否真的有必要。这里的大局是什么?除非您绝对 100% 直到运行时才知道属性名称,否则几乎总是有更好的方法......

于 2013-11-11T16:02:58.620 回答
0

if (object1.field == value)我认为由于语句中的类型错误而显示错误 。使用反射获取字段的类型并根据类型比较值。

希望这会有所帮助,谢谢。

于 2013-11-11T16:44:22.693 回答