我知道标题可能会造成混淆,所以让我描述一下问题。我目前正在重构我们的代码库的一部分。
我们有很多类:例如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?
}
}
答案 0 :(得分:2)
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成员是特定于类的行为,应该进入每个类。