-1

我有一个复杂的类,其字段可以是列表字典和任何其他类。一些基本数据类型是int,boolstring一些枚举。我需要创建一个函数,该函数接受该类的一个实例和一个字符串,并根据是否提到字符串返回 true 或 false。

public class Record
  {
    public Dictionary<string,int> Counts { get; set; }
    public Dictionary<string,list<string>> Syns {get; set;}
    public string Name { get; set; }
    public KeyValuePair<string,KeyValuePair<string,bool>> Stuff { get; set; }
    //etc 
  }

这是该方法应该做什么

   public static bool IsValuePresent(Object o, string keyword)
     {
       //cycle through all possible string values of o and check if keyword is present. 
       //return true if so, otherwise false
     } 

可能的电话:

 Record record = dbAccess.GetCurrent();
 bool flag = IsValuePresent(record, "Name");

备注:可以使用ToJSON,但这将验证"name"对象属性名称中是否存在,但它应该只验证值。

4

2 回答 2

0

您应该能够使用递归并使用 System.Reflection。这是一个好帖子:

反射 - 在我自己的程序集中递归迭代对象的属性 (Vb.Net/3.5)

看着:

foreach (PropertyInfo pi in o.GetType().GetProperties())
于 2013-01-08T20:31:14.160 回答
0

抱歉,如果我误解了,但我认为您需要先参考您班级中的字段

record->field1record.field1(对于静态分配的类)

我假设这些字段是一个字典类,因此您可以使用其中一种字典类方法来定位您的字符串。

record->field1.getindex("Name") 

然后,您可以将整个过程包装在您的方法中,并使其成为记录类中的方法或使其成为外部方法。下面我使用内部方法。

template <class T>
bool Record :: IsValuePresent(T listobject, string in) {

switch (typeof(listobject))
{
   case 'dictionary'
     if(record->field1.getindex(in) != -1)  // -1 meaning not present in this example
     {
       return false;
     } else return true;
   case 'list'
    // more code
   default: 
     return false;
}

}

编译器应该优化上述方法。

于 2013-01-08T20:36:38.677 回答