2009-11-12 7 views
40

La liste de tableaux ci-dessous peut-elle être initialisée directement sans nécessiter de tableau de chaînes aFileExt?Initialisation de ArrayList avec un littéral constant

private static string[] aFileExt = 
    {"css", "gif", "htm", "html", "txt", "xml" }; 
private System.Collections.ArrayList alFileTypes = 
    new System.Collections.ArrayList(aFileExt); 

La ligne ci-dessous est le but, mais mon compilateur .Net ne l'aime pas:

private static System.Collections.ArrayList alFileTypes = 
    new System.Collections.ArrayList({"css","gif","htm","html","txt","xml"}); 

J'utilise le Micro Framework .net et n'ont donc pas accès à des types génériques.

Répondre

66

C# 1 ou 2:

private static ArrayList alFileTypes = 
    new ArrayList(new string[] {"css","gif","htm","html","txt","xml"}); 

C# 3 en utilisant un tableau implicitement typé:

private static ArrayList alFileTypes = 
    new ArrayList(new[] {"css","gif","htm","html","txt","xml"}); 

C# 3 en utilisant une collection initialiseur:

private static ArrayList alFileTypes = 
    new ArrayList{"css","gif","htm","html","txt","xml"}; 

Ou créer votre propre méthode d'assistance:

public static ArrayList CreateList(params object[] items) 
{ 
    return new ArrayList(items); 
} 

alors:

static ArrayList alFileTypes = CreateList("css","gif","htm","html","txt","xml"); 

Toute raison pour laquelle vous ne l'utilisez les collections génériques, btw?

+0

Merci pour votre aide. Oui, les génériques et plusieurs System.Collections ne sont pas pris en charge dans ma version de .net. – MandoMando

+0

@MandoMando: Pour une question comme celle-ci, il vaut probablement la peine de préciser quelle version de .NET vous utilisez, et quelle version de C#. –

+0

L'initialisateur de collection C# 3 est la solution pour moi parce que: 1. il compile sur ma version (spéciale) de .net 2. ne crée pas un nouvel objet. (La mémoire est un problème dans ce cas) – MandoMando

1
private static System.Collections.ArrayList alFileTypes = 
new System.Collections.ArrayList(new string [] {"css","gif","htm","html","txt","xml"}); 
0

oui, il suffit de changer

private static System.Collections.ArrayList alFileTypes = 
    new System.Collections.ArrayList({"css","gif","htm","html","txt","xml"}); 

à

private static System.Collections.ArrayList alFileTypes = 
    new System.Collections.ArrayList(new string[] {"css","gif","htm","html","txt","xml"}); 
12

Si vous utilisez .NET 2.0 ou supérieur, vous devez utiliser le type générique List<T> (même s'il s'agit de List<object>, ce qui vous donnerait la même fonctionnalité que ArrayList).

Si vous utilisez .NET 3.5 ou plus, vous pouvez utiliser cette syntaxe:

private static List<string> fileTypes = new List<string>() 
{ 
    "css","gif","htm","html","txt","xml" 
}; 

De toute façon, cependant, si vous voulez coller avec ArrayList, vous pouvez simplement faire:

private static System.Collections.ArrayList alFileTypes = 
new System.Collections.ArrayList(new object[] {"css","gif","htm","html","txt","xml"}); 
+3

+1 pour utiliser la liste à la place ou ArrayList (et toujours répondre à la question d'origine). – Guffa

+0

En fait, ma version de .Net Generics n'est pas supportée. – MandoMando

1

Essayez

private static System.Collections.ArrayList alFileTypes = new System.Collections.ArrayList(){"css","gif","htm","html","txt","xml"}; 
+0

Je pensais que c'était intelligent, aussi. Dans mon esprit, il ne semblait même pas qu'il allait compiler :) merci! – MandoMando

8

C# 3.0 avec un List<T> générique, plutôt qu'un ArrayList:

private static List<string> alFileTypes = 
    new List<string> {"css","gif","htm","html","txt","xml"}; 
+0

Excellent! Mais pour compiler, le LHS devrait être de type Liste : 'Liste statique privée alFileTypes = nouvelle Liste {" css ", ...' –

+0

@Rubistro, en effet ... J'ai juste oublié de remplacer "ArrayList" ;) –

Questions connexes