Não use nulo no retorno de coleções
Quando você tiver um método em que o retorno é algum tipo de coleção, ou seja, qualquer classe que implemente IEnumerable ou uma de suas interfaces filhas, nunca retorne null.
Quando a lógica do seu método não tiver elementos para serem colocados na coleção de retorno, você deve retornar uma lista vazia, com zero elementos. Essa boa prática vai facilitar a vida do código que irá consumir seu método.
Vamos ver um exemplo de um método que retorne uma coleção:
public class BookService
{
public IList<Book> FindBooksByTitle(string startsWith)
{
//Alguma lógica que não encontra nenhum livro.
return null;
//Código restante.
}
}
E o código que consome o método FindBooksByTitle:
BookService bs = new BookService();
foreach (var book in bs.FindBooksByTitle(&amp;quot;The history&amp;quot;))
{
//Faz alguma coisa com a variável book.
}
Do jeito que está, se nenhum livro for encontrado de acordo com o critério passado, o valor retornado será null. Consequentemente, na linha 3 do código consumidor será gerada uma exceção do tipo NullReferenceException, pois tentará iterar através do foreach em uma variável nula.
Como resolvemos isso? Ah, basta colocar uma verificação se o retorno do método é nulo:
BookService bs = new BookService();
IList<Book> books = bs.FindBooksByTitle("The history");
if (books != null)
{
foreach (var book in books)
{
//Faz alguma coisa com a variável book.
}
}
Errado! O código que consome o método não pode ficar responsável por fazer esse tratamento. Senão, todo código que consumir o método FindBooksByTitle precisará fazer essa verificação de retorno nulo antes de iterar na coleção. Essa responsabilidade tem de ficar dentro da classe BookService e não fora dela.
Consertando o exemplo para retornar uma lista vazia:
public class BookService
{
public IList<Book> FindBooksByTitle(string startsWith)
{
//Alguma lógica que não encontra nenhum livro.
return new List<Book>();
//Código restante.
}
}
Agora o código consumidor pode iterar sem erros, mesmo que não seja encontrado nenhum livro:
BookService bs = new BookService();
foreach (var book in bs.FindBooksByTitle("The history"))
{
//Faz alguma coisa com a variável book.
}


Comentários