J'ai une grande liste statique qui est essentiellement une table de consultation, donc j'initialiser le tableau dans le code.
private static List<LookupItem> _lookupTable = new List<LookupItem>() { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, //etc }
5 Réponses :
Vous essayez d'utiliser un initialiseur de collection sur la liste elle-même, pas sur votre type: donc il recherche un Vous devriez mettre en place votre propre em> classe em> pour utiliser un initialiseur de collecte personnalisé. Pendant que vous utilisez ajouter code> méthode avec quatre paramètres avec quatre paramètres Sur
Liste
list
Je pense que vous devez créer une collection personnalisée au lieu de la liste. Appelez-le sur la recherche, par exemple. Donnez cette collection une méthode Ajout (int, int, flotteur, flotteur) et devez-la mettre en œuvre iEnumerable. Par exemple:
class LookupItem { public int a; public int b; public float c; public float d; } class LookupItemTable : List<LookupItem> { public void Add(int a, int b, float c, float d) { LookupItem item = new LookupItem(); item.a = a; item.b = b; item.c = c; item.d = d; Add(item); } } private static LookupItemTable _lookupTable = new LookupItemTable { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } };
Fantastique. Merci beaucoup.
Cela signifie-t-il que je dois mettre en œuvre iEnumerable sur ma classe de recherche et retourne chaque paramètre? Ma classe n'est pas une classe de collection cependant. P>
Non, cela signifie que
list
code> implémente iEnumerable code>, c'est pourquoi vous pouvez écrire p>
xxx pré> Cela signifie également que si votre
lookuptutem code> était une collection implémentée
ienumerable code>, vous auriez pu écrire: p>
xxx pré> blockQuote>
Liste code> avec un
Ajouter code> surcharge qui prend plusieurs arguments:
public class Hack : IEnumerable {
public int LuckyNumber { get; set; }
public double Total { get; private set; }
public void Add(string message, int operand1, double operand2, double operand3) {
Console.WriteLine(message);
this.Total += operand1 * operand2 - operand3;
}
public IEnumerator GetEnumerator() { throw new NotImplementedException(); }
}
class Program {
static void Main(string[] args) {
Hack h1 = new Hack() {
{ "Hello", 1, 3, 2},
{ "World", 2, 7, 2.9}
};
Console.WriteLine(h1.Total);
Hack h2 = new Hack() { LuckyNumber = 42 };
Console.WriteLine(h2.LuckyNumber);
}
}
Vous ne devriez jamais le faire dans un vrai programme code> - d'accord. Que devriez-vous faire dans un véritable programme? Scénario: portant de Java et avoir une classe qui a 3
ajouter () code> surcharges et outils
ienumerable
icollection
supprimer () code>,
effacer () code> méthodes que je ne veux pas . Existe-t-il une autre solution pour que cela soit plus clair comment utiliser les initialisateurs de la collection à l'aide d'IntelliSense ou écrit la documentation de ma seule option?
Plutôt que d'obscurcir l'intention de la liste avec une classe personnalisée découlant de la liste Notez que vous négociez de la clarté pour Brevity, alors utilisez vos propres risques. L'utilisation de "New ListItem" vous permet de faire du F12 directement au constructeur; Cette extension ne le fait pas (et cela ne serait-il jamais probablement évident pour les autres développeurs). P> P>