QUANDO LIST<T> RETORNA NULL
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:
Quando vou usar a classe no projeto, utilizo assim (por exemplo):
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:
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?
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?
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!
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!
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.
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