¿Puedo establecer un valor de propiedad con Reflection?

Sé el nombre de una propiedad en mi clase C #. ¿Es posible utilizar la reflexión para establecer el valor de esta propiedad?

Por ejemplo, supongamos que sé que el nombre de una propiedad es string propertyName = "first_name"; . Y existe una propiedad llamada first_name . ¿Puedo configurarlo usando esta cadena?

Sí, puedes usar el reflection: simplemente tócalo con Type.GetProperty (especificando flags obligatorios si es necesario), luego llama a SetValue apropiada. Muestra:

 using System; class Person { public string Name { get; set; } } class Test { static void Main(string[] arg) { Person p = new Person(); var property = typeof(Person).GetProperty("Name"); property.SetValue(p, "Jon", null); Console.WriteLine(p.Name); // Jon } } 

Si no es una propiedad pública, deberá especificar BindingFlags.NonPublic | BindingFlags.Instance BindingFlags.NonPublic | BindingFlags.Instance en la llamada GetProperty .

Debajo está mi fragmento de prueba escrito en C # .net

 using System; using System.Reflection; namespace app { class Tre { public int Field1 = 0; public int Prop1 {get;set;} public void Add() { this.Prop1+=this.Field1; } } class Program { static void Main(string[] args) { Tre o = new Tre(); Console.WriteLine("The type is: {0}", o.GetType()); //app.Tre Type tp = Type.GetType("app.Tre"); object obj = Activator.CreateInstance(tp); FieldInfo fi = tp.GetField("Field1"); fi.SetValue(obj, 2); PropertyInfo pi = tp.GetProperty("Prop1"); pi.SetValue(obj, 4); MethodInfo mi = tp.GetMethod("Add"); mi.Invoke(obj, null); Console.WriteLine("Field1: {0}", fi.GetValue(obj)); // 2 Console.WriteLine("Prop1: {0}", pi.GetValue(obj)); // 4 + 2 = 6 Console.ReadLine(); } } }