有没有办法让重写的属性调用它的父属性方法?


internal class TestBase
{
public virtual List<int> testProp { get; }
}
internal class Test : TestBase
{
class bool filteringLessThanZeroes = false;
public override List<int> testProp 
{ 
get => base.testProp.Where(i => filteringLessThanZeroes ? i > 0 : i >= 0).ToList(); }
}
// the Add calls here do nothing because every time I grab testProp
// it filters and returns me a new list
test.testProp.Add(0);
test.testProp.Add(23);
test.testProp.Add(22);
foreach (var item in test.testProp)
{
Console.WriteLine(item); // I should get 23, 22 but testProp is empty
}

Add调用不起任何作用,因为每次我获取testProp时,它都会过滤并返回一个新列表,因此不会向控制台打印任何内容。

有没有一种方法可以让重写的属性以某种方式调用父级的Add方法?

还是整个方法都错了?如果是这样的话,你会如何实现这样的东西,当你想抓取东西时,它会过滤掉它,但在上面添加东西是有效的。

我希望同一个属性在bool属性的基础上表现得不同,因为这个属性在任何地方都被使用,我不想重构它。

通过字符串属性,我可以很容易地做到这一点,例如,当他们get时,我可以删除文本的某个部分,当他们set时,我也可以再次连接它。我只需要知道如何通过方法调用来处理列表和其他对象。

问题的出现是因为您将多个任务混合到一个属性中。你应该把它们分开:

internal class TestBase
{
public virtual List<int> testProp { get; }
}
internal class Test : TestBase
{
public List<int> GetPositiveList() => base.testProp.Where(i => i > 0).ToList();
}
// now you can still use test.testProp.Add(0);

相关内容

  • 没有找到相关文章