如果需要一种告诉方法应该设置对象属性的方法。 这是一个例子:
public class Person
{
public int A { get; set; }
public int B { get; set; }
}
public class PersonController
{
public void Create(int x)
{
var p = new Person();
// How to tell if A or B should be set?
p.A = x;
// or
p.B = x;
}
}
现在这是一个非常简单的例子,但想象一下,我不知道需要修改哪种对象。
如何判断需要设置哪个属性 - A或B?
答案 0 :(得分:1)
有多种方法可以做到这一点。这是一个列表,从最理想的方法开始:
CreateA
和CreateB
Action<Person>
进行初始化后enum WhichOneToSet {SetA, SetB}
,并将值作为第二个参数Create
Create
外部创建变量。使用该变量来确定要设置的项目。以下是第三种方法的说明:
public void Create(Action<Person> postInit) {
var p = new Person();
postIniti(p);
...
}
来电者可以这样打电话:
PersonController ctrl = new PersonController();
ctrl.Create(p => p.A = 123);
ctrl.Create(p => p.B = 456);
答案 1 :(得分:1)
您可以使用反射来执行此操作:
using System.Reflection;
public class PersonController
{
public void Create(int x, string propName)
{
var p = new Person();
obj.GetType().InvokeMember(propName,
BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
Type.DefaultBinder, obj, x);
}
}
有关详细信息,请参阅帖子Set object property using reflection