Eu herdei alguns códigos no trabalho que realmente cheiram mal. Espero encontrar a solução mais indolor possível.
Existe uma maneira de verificar se algum número arbitrário é um elemento válido em uma matriz?
Exemplo - preciso verificar se existe array [25].
De preferência, eu preferiria fazer isso sem fazer um foreach () no array para encontrar as linhas.
Existe alguma maneira de fazer isso ou estou preso com o loop foreach?
Respostas:
Teste o comprimento
int index = 25; if(index < array.Length) { //it exists }
fonte
Você também pode usar o LINQ para conseguir isso:
var exists = array.ElementAtOrDefault(index) != null;
fonte
new object[]{ null }.ElementAtOrDefault(index)
retornará,null
pois o elemento em 0 énull
. UsandoElementAtOrDefault
não é uma boa solução para o controlo índices de matriz existe , que verificação da igualdade adicionado ao final faz com que os resultados indeterminada.array.Length > index
.O que exatamente você quer dizer com "é um elemento válido"? Você poderia apenas fazer:
if (array.Length >= 26)
que diria se 25 é um índice válido para a matriz ou não (assumindo um limite inferior 0).
Se você precisa saber se é não nulo ou não, basta usar:
if (array[25] != null)
(Ou uma combinação dos dois).
Se isso não ajudar, forneça um significado mais preciso de "válido" para o seu problema.
fonte
Index was outside the bounds of the array
Supondo que você também deseja verificar se o item não é nulo
if (array.Length > 25 && array[25] != null) { //it exists }
fonte
&&
emif (array.Length > 25 && array[25] != null)
, se usar único&
irá lançar a exceção IndexOutOfRange. MSDN .// I'd modify this slightly to be more resilient to a bad parameter // it will handle your case and better handle other cases given to it: int index = 25; if (index >= 0 && index < array.Length) { // Array element found }
fonte
Você pode usar o comprimento da matriz e ver se o seu número arbitrário se encaixa nesse intervalo. Por exemplo, se você tem um array de tamanho 10, então array [25] não é válido porque 25 não é menor que 10.
fonte
Você pode preferir usar uma lista, para que possa verificar a existência.
List<int> l = new List<int>(); l.Add(45); ... ... if (l.Count == 25) { doStuff(); } int num = 45; if (l.Contains(num)) { doMoreStuff(); }
fonte
array.length
dirá quantos elementos estão em um arrayfonte
Você pode verificar se o índice é menor que o comprimento da matriz. Isso não verifica se há nulos ou outros casos estranhos em que o índice pode receber um valor, mas não foi fornecido explicitamente.
fonte
Você pode verificar o comprimento da matriz para ver se o item 25 é válido no sentido de estar na matriz, então você pode usar
if (array.Length > 25) { if (array[25] != null) { //good } }
para ver se o próprio item da matriz foi definido.
fonte
Parece que você está usando uma matriz para armazenar campos diferentes. Este é definitivamente um cheiro de código. Eu evitaria usar arrays tanto quanto possível, pois geralmente eles não são adequados (ou necessários) em código de alto nível.
Mudar para um dicionário simples pode ser uma opção viável a curto prazo. Da mesma forma que usar uma grande classe de bolsa de propriedades. Existem muitas opções. O problema que você tem agora é apenas um sintoma de um design ruim, você deve procurar consertar o problema subjacente em vez de apenas corrigir o design ruim para que funcione de certa forma, mais ou menos, por enquanto.
fonte