3

我有课

public class Rule
{
    public int IdRule { get;set;}
    public string RuleName { get; set; }
}

我有带有值的哈希表列表。有键“idRule”、“ruleName”。例子

List<Hashtable> list = new Hashtable();
list["idRule"] = 1;
list["ruleName"] = "ddd";

我有功能:

private static List<T> Equaler<T>(T newRule)
{
   var hashTableList = Sql.Table(NameTable.Rules); //Get table from mssql database
   var list = new List<T>();
   var fields = typeof (T).GetFields();

   foreach (var hashtable in hashTableList)
   {
       var ormRow = newRule;
       foreach (var field in fields)
       {
            ???what write this???
            // i need something like 
            //ormRow.SetValueInField(field, hashtable[field.Name])

       }
       list.Add(ormRow);
   }
   return list;
}

调用这个函数:

var rules = Equaler<Rule>(new Rule())

问题:如果我知道变量的字符串名称,如何设置变量的值?

4

1 回答 1

5

您可以使用反射来执行此操作。

string value = hashtable[field];
PropertyInfo property = typeof(Rule).GetProperty(field);
property.SetValue(ormRow, value, null);

由于您知道类型是 Rule,您可以使用typeof(Rule)来获取 Type 对象。但是,如果您在编译时不知道类型,您也可以使用它obj.GetType()来获取 Type 对象。还有一个补充属性PropertyInfo.GetValue(obj, null),它允许您仅使用属性的“字符串”名称来检索值。

参考:http: //msdn.microsoft.com/en-us/library/xb5dd1f1.aspx

于 2013-02-27T04:57:43.347 回答