为什么我们不能直接在List <string> obj = new List <string>()中添加值?

时间:2019-09-05 10:31:22

标签: c# asp.net asp.net-web-api c#-4.0

我想列出城市,但是当我尝试在列表中添加值时却报错

public class ValuesController : ApiController
{
    List<string> cities = new List<string>();
    cities.Add("pune");
    cities.Add("Mumbai");

    // GET api/values
    public IEnumerable<string> Get()
    {
        return cities ;
    }
}

我想知道为什么添加到列表中时会出错?

3 个答案:

答案 0 :(得分:5)

您不能在类主体中编写类似的代码

您有2个选项,可以在声明列表时设置列表的内容

List<string> cities = new List<string>() {"pune", "Mumbai"};

或者,您可以执行当前操作,但是将一些代码移到类的构造函数中

public class ValuesController : ApiController
{
    List<string> cities = new List<string>();

    public ValuesController()
    {
        cities.Add("pune");
        cities.Add("Mumbai");
    }

    // GET api/values
    public IEnumerable<string> Get()
    {
        return cities ;
    }
}

详细了解类构造器here

您可能还需要考虑将cities设置为私有字段

答案 1 :(得分:1)

您不能在构造函数或方法主体之外访问这样的类成员(>>> import numpy as np >>> np.any(df[:,None] == np.array([[111, 222]]), axis=0).all() False ),这根本不是有效的C#。

成员初始化代码由编译器移至构造函数。因此,如果您list.Add()一个字段,那么该new实际上位于(隐式生成或显式声明的)构造函数中。

因此,出于可读性考虑,只需创建一个构造函数并将初始化代码移入该构造函数即可。

答案 2 :(得分:0)

C#当前不支持并且可能永远不支持您编写的代码,但这并不是说您无法实现类似的功能。

例如,如果要声明string[]而不是List<string>,则可以按照所需的方式声明值。

此外,.ToList<string>()方法也可以用于返回列表。

这是您修改的代码:

public class ValuesController : ApiController
{
    private string[] cities = { "pune", "Mumbai" }; // cities is now an array of string

    // GET api/values
    public IEnumerable<string> Get()
    {
        return cities.ToList<string>(); // .ToList<string>() method returns cities as a List<string>

    }

}