如何指示应该从参数修改哪个属性
本文关键字:参数 修改 属性 何指示 指示 | 更新日期: 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?
有多种方法可以做到这一点
- 制作两个单独的方法,
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);
您可以使用反射来完成此操作:
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);
}
}
有关更多信息,请参阅使用反射设置对象属性