繁体   English   中英

C#修改通用属性

[英]c# modify a generic property

我有一个具有2个相同类型(布尔型)属性的viewmodel。 我喜欢有一个将属性之一设置为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,则不会更新字符串。 有解决方案吗?

您正在尝试使用反射而不使用反射。 我认为您不会找到答案。 语言中没有针对属性的泛型。

我能想到的最糟糕的事情是通过一个动作-这很荒谬,但是可以。 请不要这样做:

public void PerformAction(MyViewModel vm, bool newVal,
    Action<MyViewModel, bool> action)
{
    action(vm, newVal);
}

PerformAction(someViewModel, true, (vm, b) => vm.IsReadOnly = b);

那不是这样做的好方法。 您不想结合使用getter和setter。 标准做法是为每个值都有一个getter和setter,以便您可以控制对它们的访问。 对于这两个变量都具有吸气剂和吸气剂会破坏使用吸气剂和吸气剂的总体目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM