C# 用一个方法设置多个属性

C# 用一个方法设置多个属性,c#,C#,所以我有一个c#类,它有三个属性 public class ClassA { public bool IsBool1; public bool IsBool2; public bool IsBool3; } 我有一个方法可以完成以下任务 public void MethodA() { ClassA c = GetCurrentClassA(); c.IsBool1 = !c.IsBool1; ClassADataAccess.Update(c);

所以我有一个c#类,它有三个属性

public class ClassA
{
    public bool IsBool1;
    public bool IsBool2;
    public bool IsBool3;
}
我有一个方法可以完成以下任务

public void MethodA()
{
    ClassA c = GetCurrentClassA();
    c.IsBool1 = !c.IsBool1;
    ClassADataAccess.Update(c);
    this.BindClassADetails(c);
}
现在,为了避免为其他两个属性编写MethodA,有没有一种方法可以编写一个能够处理这三个属性的方法

像这样的东西

public void UpdateAndBind(bool value)
{
    ClassA c = GetCurrentClassA();

    ///what to do here to set the property?

    ClassADataAccess.Update(c);
    this.BindClassADetails();
}

如何向
GetCurrentClassA
方法添加参数,以便在其中指定所需的值

public void MethodA()
{
    ClassA c = GetCurrentClassA(true, false, true);
    ClassADataAccess.Update(c);
    this.BindClassADetails(c);
}

针对你的评论:


这可能工作得很好,我只是好奇是否有办法告诉方法在传入对象上设置哪个属性克里斯·惠森哈特

有一种使用反射的方法:

    // using a generic method, you can specify the name of the property you want to set, 
    // the instance you want it set on, and the value to set it to...
    private T SetProperty<T>(T instance, string propertyName, object value)
    {
        Type t = typeof(T);
        PropertyInfo prop = t.GetProperty(propertyName);
        prop.SetValue(instance, value, null);
        return instance;
    }
//使用泛型方法,可以指定要设置的属性的名称,
//要将其设置为的实例,以及要将其设置为的值。。。
私有T SetProperty(T实例、字符串propertyName、对象值)
{
类型t=类型(t);
PropertyInfo prop=t.GetProperty(propertyName);
prop.SetValue(实例,值,null);
返回实例;
}
现在…您可能想使用try/catch,也可能在使用它之前检查传入的内容,以确保它不会突然爆炸…但一般来说,最简单的是,这是您应该使用的方法。
祝你好运

可以使用Func委托作为输入参数

首先,您需要使用属性,而不是字段:

public class ClassA
{
    public bool IsBool1 { get; set; }
    public bool IsBool2 { get; set; }
    public bool IsBool3 { get; set; }
}
然后需要两个Func委托作为输入参数:

public ClassB
{
     public void UpdateAndBind(Func<ClassA, bool> getProp, Func<ClassA, bool, ClassA> setProp)
    {
        ClassA c = GetCurrentClassA();

        // What to do here to set the property?
        setProp(c, getProp(c));

        ClassADataAccess.Update(c);
        this.BindClassADetails(c);
    }
    ...
}

这可能工作得很好,我只是好奇是否有办法告诉一个方法在传入对象上设置哪个属性。啊,这就是问题所在。是的,有一种方法可以做到这一点,但它很长,很慢,不是一种常见的做法。使用反射,您可以将属性指定为变量,以便在传递属性和值(或者使用委托)时可以使用方法。无论如何,没有比标准方法更好或更优雅的解决方案了。好吧,是的,我知道反射方法,我宁愿不这样做。谢谢你的意见。@Chris Whisenhunt:“好的,是的,我知道反射方式,我不想这样做。谢谢你的意见。”。然后你接受一个答案,告诉你如何用反思来做?[无论如何,我要说的是,在这个任务中使用反射是过分的]
static void Main(string[] args)
{
    ClassB classB = new ClassB();
    classB.UpdateAndBind(classA => classA.IsBool1, (classA, value) => { classA.IsBool1 = !value; return classA; });
    classB.UpdateAndBind(classA => classA.IsBool2, (classA, value) => { classA.IsBool2 = !value; return classA; });
    classB.UpdateAndBind(classA => classA.IsBool3, (classA, value) => { classA.IsBool3 = !value; return classA; });
}