首页 > 解决方案 > 在另一个类的方法中传递要访问的类的哪个成员

问题描述

我知道标题可能会令人困惑,所以让我描述一下这个问题。我目前正在重构我们代码库的一部分。

我们有一堆类:比如说A, B, C。这些类大多相似,并且是一个简单的重构目标,除了我正在努力解决的这一行:

// In Class A
SomeType x = r?.abc?.FirstOrDefault();

// In Class B
SomeType x = r?.def?.FirstOrDefault();

// In Class C
SomeType x = r?.ghi?.FirstOrDefault();

r是在此特定语句之前填充的对象。该类有一堆成员:abc, def,ghi等。每个类a, b,c只访问其中一个。如何在我正在编写的新基类中重构这些语句?

public class BaseClass {
    public T SomeMethod<T>(var param1, var param2, var member) {
        // Some processing. `r` gets populated
        SomeType x = r?.member?.FirstOrDefault(); // I want to do something like this but obviously this won't work. How to solve this?
    }
}

标签: c#ooprefactoring

解决方案


public class BaseClass
{
    protected abstract SomeType GetX(OtherType r);

    … SomeType x = GetX(r);
}

public class A
{
    protected override SomeType GetX(OtherType r) => r?.abc?.FirstOrDefault();
}

每个类访问 r 的哪个成员是特定于类的行为,并且应该进入每个类。


推荐阅读