2014-12-05 158 views
3

我有一个类可以说5个属性匹配字符与类属性名称

Int32 Property1; 
Int32 Property2; 
Int32 Property3; 
Int32 Property4; 
Int32 Property5; 

现在我要动态设置的只有3个其中三个属性的值。到目前为止是好的,但我的问题是我在运行时将这三个属性名称作为字符串。 可以说,这样的事情..

List<String> GetPropertiesListToBeSet() 
{ 
    List<String> returnList = new List<String>(); 
    returnList.Add("Property1"); 
    returnList.Add("Property3"); 
    returnList.Add("Property4"); 
    retun returnList; 
} 

所以现在,

List<String> valuesList = GetPropertiesToBeSet(); 

foreach (String valueToSet in valuesList) 
{ 
// How Do I match these Strings with the property Names to set values 
    Property1 = 1; 
    Property3 = 2; 
    Property4 = 3; 
} 
+0

为什么你不能使用'Dictionary '键是属性名? – 2014-12-05 14:00:14

+0

或更好的数组或字典其中索引是“属性号码”(例如,'Property1'的'1'等) – 2014-12-05 14:23:55

回答

6

你可以做这样的事情。属性是你的类

 Properties p = new Properties(); 
     Type tClass = p.GetType(); 
     PropertyInfo[] pClass = tClass.GetProperties(); 

     int value = 0; // or whatever value you want to set 
     foreach (var property in pClass) 
     { 
      property.SetValue(p, value++, null); 
     } 
3

假设该类包含他们的名字是Properties。您可以使用GetProperty()方法获取PropertyInfo然后SetValue()方法:

Properties p = new Properties(); 
Type t = p.GetType(); //or use typeof(Properties) 

int value = 1; 
foreach (String valueToSet in valuesList) { 
    var bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance; //because they're private properties 
    t.GetProperty(valueToSet, bindingFlags).SetValue(p, value++); //where p is the instance of your object 
} 
相关问题