2009-11-12 16 views
40

¿Puede ArrayList a continuación inicializarse directamente sin la necesidad de una matriz de cadenas de textoFile?Inicializando ArrayList con literal constante

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

La línea de abajo es el objetivo, pero mi compilador .Net no le gusta:

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

estoy usando el .NET Micro Framework y por lo tanto no tienen acceso a tipos genéricos.

Respuesta

66

C# 1 o 2:

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

C# 3 utilizando una matriz implícitamente mecanografiado:

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

C# 3 utilizando un inicializador de colección:

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

O crear su propio método de ayuda:

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

a continuación:

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

Cualquier razón por la cual no se está usando las colecciones genéricas, por cierto?

+0

Gracias por su ayuda. Sí, los genéricos y muchos de los System.Collections no son compatibles con mi versión de .net. – MandoMando

+0

@MandoMando: para una pregunta como esta, probablemente valga la pena indicar qué versión de .NET está usando y qué versión de C#. –

+0

El inicializador de la colección C# 3 es la solución para mí porque: 1. compila en mi versión (especial) de .net 2. no crea un objeto nuevo. (la memoria es un problema en este caso) – MandoMando

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

sí, basta con cambiar

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

a

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

Si está utilizando .NET 2.0 o superior, debe utilizar el tipo genérico List<T> (incluso si es List<object>, que le daría la misma funcionalidad que ArrayList).

Si está utilizando .NET 3.5 o superior, puede utilizar esta sintaxis:

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

De cualquier manera, sin embargo, si desea seguir con ArrayList, sólo se puede hacer:

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

+1 para utilizar la Lista en su lugar o ArrayList (y aún responder a la pregunta original). – Guffa

+0

En realidad, mi versión de .Net Generics no es compatible. – MandoMando

1

Trate

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

Pensé que esto también era inteligente. En mi mente, ni siquiera parecía que iba a compilar :) gracias! – MandoMando

8

C# 3.0 con un genérico List<T>, en vez que un ArrayList:

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

¡Excelente! Pero para compilar, el LHS debería ser del tipo List : 'static static List alFileTypes = new List {" css ", ...' –

+0

@Rubistro, de hecho ... Me olvidé de reemplazar "ArrayList" ;) –