我有一个viewmodel,它有2个相同类型的属性(bool)。我喜欢有一个函数,它将其中一个属性设置为bool值。 假设你有一个IsReadonly属性。
public void SetReadOnly(MyViewModel vm, bool newVal)
{
vm.IsReadOnly = newVal;
}
现在我想让它更通用,并且具有以下两者的功能:
public void SetBooleanProperty(MyViewModel vm, bool newVal, ?bool? myProperty)
{
vm.myProperty = newVal; // sure this is an error, myProperty doesn't exist in the viewmodel. But that shows the way i like to have.
}
我开始采用这种方法:
public void SetBooleanproperty<TProp>(MyViewModel vm, bool newVal, TProp myProperty)
{
vm.??? = newVal;
}
我不喜欢使用函数GetPropertyByName(“IsReadonly”),我认为它可以在.Net的反射类中的某个地方使用。 原因:如果另一个开发人员重构项目并重命名IsReadonly,则字符串将不会更新。这是否有解决方案?
答案 0 :(得分:0)
您尝试使用反射而不使用反射。我认为你不会找到答案。该语言中没有针对属性的泛型。
我能想到的最可靠的事情,就是传递一个动作 - 这是非常荒谬的,但它确实有效。请不要这样做:
public void PerformAction(MyViewModel vm, bool newVal,
Action<MyViewModel, bool> action)
{
action(vm, newVal);
}
PerformAction(someViewModel, true, (vm, b) => vm.IsReadOnly = b);
答案 1 :(得分:0)
这不是一个很好的方法。你不想组合getter和setter。标准做法是为每个值设置一个getter和setter,以便您可以控制对它们的访问。拥有两个变量的getter和setter会破坏getter和setter的一般目的。