【问题标题】:why we cannot add values directly in List<string> obj= new List<string>()?为什么我们不能直接在 List<string> obj= new List<string>() 中添加值?
【发布时间】:2019-09-05 10:31:22
【问题描述】:

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

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

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

【问题讨论】:

  • 你遇到了什么错误?
  • ArrayList&lt;T&gt; 也不是 LinkedList&lt;T&gt; 派生自 List&lt;T&gt; 所以显然 List&lt;string&gt; cities = new ArrayList&lt;string&gt;(); 甚至不会编译
  • cities.Add 在当前上下文中不存在
  • 请用整个代码更新您的问题(以便声明城市的位置,您尝试添加的位置)
  • 显然你不能在类体中使用cities.Add("pune");,它必须在某个方法/构造函数中

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


【解决方案1】:

你不能在类主体中编写这样的代码

您有 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 设为私有字段

【讨论】:

  • 但是为什么第二种方法在课堂上不起作用?
  • 因为这就是 C# 语法的定义方式......你应该学习它(也因为它没有任何意义 - 就何时调用此代码而言)
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    例如,如果您要声明 string[] 而不是 List&lt;string&gt;,那么您可以按照您想要的方式声明值。

    另外,.ToList&lt;string&gt;()方法也可以用来返回一个List。

    这是您修改后的代码:

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

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 2017-05-08
      • 2014-01-09
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      相关资源
      最近更新 更多