我有课
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())
问题:如果我知道它的字符串名称,如何设置变量值?
答案 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)
,它允许您仅使用属性的“字符串”名称来检索值。