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 に答える