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

why we cannot add values directly in List<string> obj= new List<string>()?

我想制作城市列表,但是当我尝试在列表中添加值时出现错误

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 ;
    }
}

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

你不能在 class 正文中编写这样的代码

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

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

或者,您可以执行当前正在执行的操作,但将一些代码移至 class' 构造函数

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 ;
    }
}

阅读更多关于 class 构造函数的信息 here

您可能还想考虑将 cities 设为私有字段

您无法在构造函数或方法主体之外访问您的 class 成员 (list.Add()),这根本不是有效的 C#。

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

所以为了可读性,简单地创建一个构造函数并将初始化代码移到构造函数中。

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

例如,如果您要声明 string[] 而不是 List<string>,那么您可以按照您希望的方式声明值。

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

这是您修改后的代码:

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>

    }

}