48

Can the ArrayList below be initialized directly without the need for aFileExt string array?

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

The line below is the goal, but my .Net Compiler does not like it:

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

I am using the .net Micro Framework and thus do not have access to generic types.

secretformula
  • 6,414
  • 3
  • 33
  • 56
MandoMando
  • 5,215
  • 4
  • 28
  • 35

6 Answers6

73

C# 1 or 2:

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

C# 3 using an implicitly typed array:

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

C# 3 using a collection initializer:

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

Or create your own helper method:

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

then:

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

Any reason why you're not using the generic collections, btw?

Jon Skeet
  • 1,421,763
  • 867
  • 9,128
  • 9,194
  • Thanks for your help. Yes, generics and many of the System.Collections are not supported in my version of .net. – MandoMando Nov 12 '09 at 15:57
  • @MandoMando: For a question like this it's probably worth stating which version of .NET you're using, and which version of C#. – Jon Skeet Nov 12 '09 at 15:59
  • The C# 3 collection initializer is the solution for me because: 1. it compiles on my (special) version of .net 2. does not create a new object. (memory is an issue in this case) – MandoMando Nov 12 '09 at 16:03
  • Jon, I didn't mention my version of .net somewhat intentionally because it's in beta and changing, and there are very few folks around world that use netmf v4.0. – MandoMando Nov 12 '09 at 16:08
  • @MandoMando: It would still have been useful information. For example, if you knew you could use C# 3 features even without generics, that would have told us that a collection initializer would be a good way to go. – Jon Skeet Nov 12 '09 at 17:16
  • @Jon Skeet: Knowing the version info would have saved you time. I honestly cannot make any factual claims about the version of C# supported (it's up to MS .Net team to call that when they're ready). Though I did know that generics are not supported and thought it's unrelated. Based on the responses to my new-to-the-site post, I now know to include all helpful info :) Many thanks for providing solutions for all versions. Which was indeed what I was looking to feed the compiler. – MandoMando Nov 12 '09 at 17:42
15

If you're using .NET 2.0 or greater, you should be using the generic List<T> type (even if it's List<object>, which would given you the same functionality as ArrayList).

If you're using .NET 3.5 or greater, you can use this syntax:

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

Either way, however, if you want to stick with ArrayList, you can just do:

private static System.Collections.ArrayList alFileTypes = 
 new System.Collections.ArrayList(new object[] {"css","gif","htm","html","txt","xml"});
Adam Robinson
  • 182,639
  • 35
  • 285
  • 343
10

C# 3.0 with a generic List<T>, rather than an ArrayList :

private static List<string> alFileTypes =
    new List<string> {"css","gif","htm","html","txt","xml"};
Thomas Levesque
  • 286,951
  • 70
  • 623
  • 758
1
private static System.Collections.ArrayList alFileTypes = 
 new System.Collections.ArrayList(new string [] {"css","gif","htm","html","txt","xml"});
Sean Bright
  • 118,630
  • 17
  • 138
  • 146
1

Try

private static System.Collections.ArrayList alFileTypes =   new System.Collections.ArrayList(){"css","gif","htm","html","txt","xml"};
TLiebe
  • 7,913
  • 1
  • 23
  • 28
0

yes, just change

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

to

private static System.Collections.ArrayList alFileTypes = 
     new System.Collections.ArrayList(new string[] {"css","gif","htm","html","txt","xml"});
kemiller2002
  • 113,795
  • 27
  • 197
  • 251