QUANDO LIST<T> RETORNA NULL

PERCIFILHO 04/05/2016 13:04:09
#461824
Pessoal, talvez uma pergunta idiota, mas estou brigando comigo mesmo para tentar descobrir a solução:
Vou tentar explicar passo a passo para quem puder analisar:
Tenho uma classe: BackWork (que é aquela que o Kerplunk ensina nos vídeos dele com Reflection);
Dentro dessa classe BackWork, tenho:

public List<T> GetAll()
{
List<T> _return = null;
using (SqlCeCommand cmd = GetSelectCommand())
{
using (SqlCeDataReader dr = cmd.ExecuteResultSet(ResultSetOptions.Scrollable))
{
if (dr.HasRows)
{
_return = new List<T>();
while (dr.Read())
{
_return.Add(ConvertRowToEntity(dr));
}
}
}
}
return _return;
}



public SqlCeCommand GetSelectCommand()
{
SqlCeCommand _return = null;
try
{
_return = new SqlCeCommand();
_return.CommandText = [Ô]Select * From {0}[Ô];
_return.CommandText = string.Format(_return.CommandText, typeof(T).Name);
_return.Connection = new SqlCeConnection();
_return.Connection.ConnectionString = conn;
_return.Connection.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
return _return;
}

Quando vou usar a classe no projeto, utilizo assim (por exemplo):

Pessoa _pessoas = new Pessoa().GetAll().Find(x => x.Nome == txtNome.Text);

O que me ocorre é que se a tabela Pessoa tiver dados, funciona normal, porém se a tabela estiver vazia, ocorre um erro:
[txt-color=#0000f0]Object reference not set to an instance of an object.
[/txt-color]
Minha pergunta: Como devo fazer essa verificação, para no caso de a List<T> estar vazia, tratar esse erro?
Se eu fizer assim:

Pessoa _pessoas = new Pessoa().GetAll().Find(x => x.Nome == txtNome.Text);
if (_pessoas == null)
{
.......
}

não funciona, pois o erro ocorre na hora que está montando a List<T>, nem passa pelo if{ }

Como faço para resolver essa questão?

DS2T 04/05/2016 13:09:14
#461825
Resposta escolhida
No seu GetAll, deixe assim:



public List<T> GetAll()
{
[txt-color=#e80000] List<T> _return = new List<T>();[/txt-color]
using (SqlCeCommand cmd = GetSelectCommand())
{
using (SqlCeDataReader dr = cmd.ExecuteResultSet(ResultSetOptions.Scrollable))
{
if (dr.HasRows)
{
_return = new List<T>();
while (dr.Read())
{
_return.Add(ConvertRowToEntity(dr));
}
}
}
}
return _return;
}


Assim, ele vai criar a lista havendo, ou não, dados ...

Abraços!
PERCIFILHO 04/05/2016 13:17:48
#461828
Puxa, DS2T, muito simples, né? E eu me matando aqui para conseguir.
Pelo amor de Deus, quanto sofrimento à toa.
Valeu mesmo pela ajuda, fico te devendo essa. Abraços e até mais.
Tópico encerrado , respostas não são mais permitidas