ИМХО это хорошая практика кодирования , пока вызовы методов не имеют побочных эффектов.
, например
, если checkIfIdInFirstRange()
, то все в порядке:
private bool checkIfIdInFirstRange()
{
return firstRange.Contains(ID);
}
Но это может привести к путанице:
private bool checkIfIdInFirstRange()
{
SomeStringProperty = "totally new value that no caller would ever expect after a call to this method";
return firstRange.Contains(ID);
}
Другое возможное решение - в зависимости от реального типа вашей проблемы - может определить интерфейс / базовый класс и использовать полиморфизм.
пример:
internal abstract class A
{
public void DoSomething(int ID)
{
if(IsInRange(ID))
DoSomethingProtected(ID);
}
protected abstract bool IsInRange(int ID);
protected abstract void DoSomethingProtected(int ID);
}
internal class B : A
{
private List<int> firstRange = new List<int> { 42, 23, 5};
protected override bool IsInRange(int ID)
{
return firstRange.Contains(ID);
}
protected override void DoSomethingProtected(int ID)
{
Console.WriteLine("{0}", ID);
}
}
public class Program
{
public static void Main(string[] args)
{
B foo = new B();
foo.DoSomething(3);
foo.DoSomething(42);
}
}
ВНИМАНИЕ: код написан без IDE.