J'essaie d'utiliser une liste contenant des tableaux de chaînes en C # mais je ne sais pas comment formater ma déclaration correctement.
private String encrypt(char[] text)
{
Random rnd = new Random();
string[] encrypted = new string[text.Length];
for (int i = 0; i < text.Length; i++)
{
int symnumb = rnd.Next(listmin, listmax);
encrypted[i] = alphabet[getnumber(text[i])][symnumb].ToString();
}
return string.Join("", encrypted);
}
C'est plus bas:
private int getnumber(char letter)
{
for (int i = 0; i < 27; i++)
{
if (letter == alphabetc[i])
{
return i;
}
}
return -1;
}
Je dois beaucoup de code non pertinent pour tout publier, mais "crypté" est un tableau de chaînes, "alphabet" est une liste de tableaux contenant des chaînes.
Déclarations:
public List<Array> alphabet = new List<Array>();
public char[] alphabetc = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' '};
Toute aide est la bienvenue.
L'erreur est assez simple; vous ne pouvez pas utiliser d'indexeur sur un Array
. Array
class est une classe de base pour tous les types de tableaux, et les tableaux sont implicitement héritent de Array. Mais, Array
lui-même n'a pas d'indexeur. Voici une démonstration de votre erreur:
int[] numbers = new[] {1, 2, 3, 4, 5};
numbers[2] = 11; // Okay
Array arr = numbers as Array;
arr[2] = 11; // ERROR!
Donc, si vous souhaitez utiliser l'indexeur, changez votre type d'élément en un tableau de quelque chose par exemple:
public List<string[]> alphabet = new List<string[]>();
Essayez d'utiliser .ElementAt
. Il fonctionne sur tout ce qui implémente IEnumerable, y compris les collections qui ne sont pas indexées.
J'ai divisé votre déclaration en plusieurs déclarations afin qu'il soit plus facile d'identifier la ligne incriminée.
Veuillez noter - ElementAt est une méthode d'extension et vous devrez utiliser le System.Linq
espace de noms pour l'utiliser.
using System.Linq;
Puis dans votre méthode:
var n = getnumber(text.ElementAt(i));
var items = alphabet.ElementAt(n);
encrypted[i] = items.ElementAt(symnumb).ToString();
Vous ne devez pas utiliser le type Array
dans votre code, changez donc votre
public List<Array> alphabet = new List<Array>();
en par ex.
public List<string[]> alphabet = new List<string[]>();
ou
public List<List<string>> alphabet = new List<List<string>>();
Si vous vous en tenez à Array
pour une raison quelconque, vous ne pouvez pas utiliser expr[i]
Mais devrez faire expr.GetValue(i)
, mais je le décourage car le type de retour déclaré est object
, et vous vous retrouverez avec beaucoup de casting.