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

时间:2013-02-27 04:54:45

标签: c# variables

我有课

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

我有Hashtable列表的值。有关键“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())

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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