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

本文关键字:参数 修改 属性 何指示 指示 | 更新日期: 2023-09-27 18:21:42

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

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?

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

有多种方法可以做到这一点

  1. 制作两个单独的方法,CreateACreateB
  2. 传递Action<Person>用于后期初始化
  3. 制作一个enum WhichOneToSet {SetA, SetB},并将一个值作为第二个参数传递给Create
  4. 制作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);

您可以使用反射来完成此操作:

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);
    }
}

有关更多信息,请参阅使用反射设置对象属性