Usuário com melhor resposta
Verificar se existe um valor em uma Lista que é de STRUCT e que neste apresenta vários campos dentro.

Pergunta
-
Bom Dia,
Hoje eu estava convertendo o código para uma pratica um pouco melhor, pois estava ficando muito complicado ter de criar Lista por Lista separada.
Eu interliguei em uma única lista vários valores providos de uma struct, mas o problema é como encontra-los usando o Contains ou qualquer algo do gênero futuro.
Exemplo:
struct User { public string ID; public string Nick; //... } public static List<User> Usuario = new List<User>(); // ... if(Usuario.Contains(... /* QUERO VERIFICAR O NICK. */ )) { // Como eu uso? não há como fazer struct anóminas e se der, nem sei se ao certo é isso. // Quero verificar pelo campo NICK. }
Respostas
-
Mas você tem que se lembrar que os métodos de extensão do Linq retornam um IEnumerable<T>, Porque os métodos de extensão do Linq pertencem à essa interface.
Por tanto, o código correto seria:
IEnumerable<User> retorno = Usuario.Where(Usuario => Usuario.NickName == Sintaxe[0]);
Ou você pode fazer uma conversão; claro, usando os métodos de extensão do IEnumerable
List<User> retorno = Usuario.Where(Usuario => Usuario.NickName == Sintaxe[0]).ToList();
User[] retorno = Usuario.Where(Usuario => Usuario.NickName == Sintaxe[0]).ToArray();
Mas só por curiosidade, o que exatamente é "Sintaxe" no seu código?
Todas as Respostas
-
Você pode usar o Linq e uma Expressão Lambda para pegar todos os User's com certo Nick.
public IEnumerator<User> GetUsersByNick(string nickToSearch) { // "users" é sua List<User> IEnumerable<User> perNickUsers = users.Where(x => x.Nick == nickToSearch); return perNickUsers; }
Você também pode usar delegates genéricos como Func e Predicate para usar o mesmo código acima, porém, com outros tipos de filtros, por exemplo, filtrando o ID ou outra informação.
-
Eu acho que encontrei uma forma usando Lambda, mas mesmo assim obrigado, vou usar se der errado.
Eu estou usando isso:
User retorno = Usuario.Where(Usuario => Usuario.NickName == Sintaxe[0]);
Se ele não encontrar nada, o que terá na variável retorno? por que pelo que eu vi, struct é tipo valor e não poderia conter null, mas o que ela terá se não encontrar nada?
-
Mas você tem que se lembrar que os métodos de extensão do Linq retornam um IEnumerable<T>, Porque os métodos de extensão do Linq pertencem à essa interface.
Por tanto, o código correto seria:
IEnumerable<User> retorno = Usuario.Where(Usuario => Usuario.NickName == Sintaxe[0]);
Ou você pode fazer uma conversão; claro, usando os métodos de extensão do IEnumerable
List<User> retorno = Usuario.Where(Usuario => Usuario.NickName == Sintaxe[0]).ToList();
User[] retorno = Usuario.Where(Usuario => Usuario.NickName == Sintaxe[0]).ToArray();
Mas só por curiosidade, o que exatamente é "Sintaxe" no seu código?
-
Mas só por curiosidade, o que exatamente é "Sintaxe" no seu código?
Não tinha um nome para eu por, coloque este nome com objetivo de pegar o nome.
Seria Nick-Name verificando a "Sintaxe", que é o nome coletado em um Readline.
Obrigado pela ajuda.