如何指示应该从参数修改哪个属性

时间:2014-09-11 15:52:32

标签: c#

如果需要一种告诉方法应该设置对象属性的方法。 这是一个例子:

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?

2 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。这是一个列表,从最理想的方法开始:

  1. 制作两个单独的方法,CreateACreateB
  2. 传递Action<Person>进行初始化后
  3. 制作enum WhichOneToSet {SetA, SetB},并将值作为第二个参数
  4. 传递给Create
  5. Create外部创建变量。使用该变量来确定要设置的项目。
  6. 以下是第三种方法的说明:

    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