C# 用一个方法设置多个属性
所以我有一个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);
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; });
}