Это было бы просто с Linq:
public class Negocio
{
public string Codigo()
{
var arquivo = new Arquivo();
var derivadaList = new List<Geral>() {
new derivada1(),
new derivada2(),
new derivada3(),
};
return derivadaList.FirstOrDefault(d => d.retornaCodigo(arquivo) == null)?.retornaCodigo(arquivo) ?? "";
}
}
Вы можете добавить столько * Geral
производных классов к derivadaList
, сколько захотите, и код продолжит функционировать, как задумано.
Здесь происходит то, что FirstOrDefault
будет запускать выражение Lamda для каждого элемента, возвращая первое, равное null
(хотя я не уверен, что это то, что вам нужно, оно соответствует вашему примеру кода). Так как он возвращает объект Geral
, вам нужно вызывать retornaCodigo
для него, только если он не нулевой. Если оно пустое, просто верните пустую строку.
Другой способ написать это будет:
public class Negocio
{
public string Codigo()
{
var arquivo = new Arquivo();
var derivadaList = new List<Geral>() {
new derivada1(),
new derivada2(),
new derivada3(),
};
foreach (var derivada in derivadaList)
{
var result = derivada.retornaCodigo(arquivo);
if (result == null)
return result;
}
return "";
}
}