Initializing list inline

前端 未结 4 389
没有蜡笔的小新
没有蜡笔的小新 2020-12-10 00:26

I\'m getting a weird error when doing this: (.net 2.0)

public overrides List getSpaceballs
{
    get { return new List() { \"abc\         


        
相关标签:
4条回答
  • 2020-12-10 00:47

    As the other users point out, that is not supported in 2.0. However, you can mimic it by doing the following.

    public overrides List<String> getSpaceballs
    {
       get { return new List<String> ( new String[] {"abc","def","egh"} ); }
    }
    

    Please note that this creates some computational overhead.

    0 讨论(0)
  • 2020-12-10 00:52

    The first option is not legal :)

    You can only do that type of initialiser on arrays.

    -- Edit: See Andrew Hare's post (and others, below); it is only available in v3 and up.

    -- Edit again:

    Just to be clear, if your compiler is of 3 or greater, you can target 2.0, to get this to work (because it's compiled down to the code that Andrew shows, below). But if your compiler is 2, then you can't.

    0 讨论(0)
  • 2020-12-10 00:55

    C#'s collection initialization syntax is only supported in versions 3 and up (since you mentioned .NET 2.0 I am going to assume you are also using C# 2). It can be a bit confusing since C# has always supported a similar syntax for array initialization but it is not really the same thing.

    Collection initializers are a compiler trick that allows you to create and initialize a collection in one statement like this:

    var list = new List<String> { "foo", "bar" };
    

    However this statement is translated by the compiler to this:

    List<String> <>g__initLocal0 = new List<String>();
    <>g__initLocal0.Add("foo");
    <>g__initLocal0.Add("bar");
    List<String> list = <>g__initLocal0;
    

    As you can see, this feature is a bit of syntax sugar that simplifies a pattern into a single expression.

    0 讨论(0)
  • 2020-12-10 01:01

    Just in case anyone would search for it as well nowadays, there is a neat way to do that using LINQ extensions. Hope it helps someone ;)

    var list = new string[]{ "1", "2", "3" }.ToList();
    
    0 讨论(0)
提交回复
热议问题