【问题标题】:Why this code is not working?为什么这段代码不起作用?
【发布时间】:2010-09-18 21:11:58
【问题描述】:

大家好,我编写了这段代码,但有两个错误。

  1. 排名说明符无效:应为“,”或“]”
  2. 无法将带有 [] 的索引应用于“int”类型的表达式

你能帮忙吗?

    static void Main(string[] args)
    {
        ArrayList numbers = new ArrayList();

        foreach (int number in new int[12] {10,9,8,7,6,5,4,3,2,1}) //error No.1
        {
            numbers.Add(number);
        }

        numbers.Insert(numbers.Count - 1, 75);
        numbers.Remove(7);
        numbers.RemoveAt(6);

        for(int i=0; i<numbers.Count; i++)
        {
            int number = (int) number[i]; // error No.2
            Console.WriteLine(number);
        }
    }

【问题讨论】:

  • 该代码不可读。使用可用于显示代码的标记。
  • 将所有代码缩进四个空格以使其更具可读性...
  • @arin,检查并确保我的格式正确。看起来标记不会让您进行 4 级缩进...?
  • 我要投反对票,因为我确信编译器已经告诉你出了什么问题。
  • arin 一旦你有一个让你满意的答案,你能接受吗?我注意到你所有的问题都没有选择答案。您需要走到选票的左侧并按下支票,答案将变为绿色。祝你有美好的一天:)

标签: c# .net arrays arraylist


【解决方案1】:

1 - 您不必指定数组的长度,只需说 new int[]

2 - number 只是一个整数,我认为您正在尝试访问 numbers[i]

【讨论】:

    【解决方案2】:

    对于 1:

    foreach (int number in new int[] {10,9,8,7,6,5,4,3,2,1})
    

    对于 2:

    int number = (int)numbers[i];
    

    您使用的是number,而您应该使用numbers(复数)。

    【讨论】:

      【解决方案3】:
      using System;
      using System.Collections;
      
      namespace ConsoleApplication3
      {
          class Program
          {
              static void Main(string[] args)
              {
                  ArrayList numbers = new ArrayList();
                  foreach (int number in new int[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 })
                  {
                      numbers.Add(number);
                  }
                  numbers.Insert(numbers.Count - 1, 75);
                  numbers.Remove(7);
                  numbers.RemoveAt(6);
                  for (int i = 0; i < numbers.Count; i++)
                  {
                      int number = (int)numbers[i];
                      Console.WriteLine(number);
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        #1 为什么不使用以下内容?

            for (int x = 10; x > 0; --x)
            {
                numbers.Add(number);
            }
        

        尽管将其声明为 int[12](作为明显的意图?),但我们似乎只使用了 10 到 1 之间的值,包括 10 到 1。为什么在这种情况下使用foreach,而for 的意图要清楚得多?

        【讨论】:

        • 如果我们想要清晰 - 为什么不只是 numbers.AddRange(new int[] { 10, ..., 1 }?或者,对于这个问题 numbers = new ArrayList(new int[ ] { 10, ..., 1 })。
        • Arin,我敢问你为什么讨厌 for 循环?在这种情况下,它不仅更清晰,而且可能比创建新数组仅用于填充更有效。马克,好电话。
        【解决方案5】:

        您应该将数组初始化为

        new int[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
        

        编译器将为您设置大小。但你正在艰难地做这件事。试试这个:

        for (int i = 10; i > 0; i-- )
        {
            numbers.Add(i);
        }
        

        如果您使用的是 .Net 3.5,还可以使用 System.Linq.Enumerable 创建范围:

        IEnumerable<int> numbers = Enumerable.Range(1, 10).Reverse();
        

        这将取代 ArrayList,这在 3.5 中毫无意义。由于您刚刚开始,ArrayList 一开始可能会更容易掌握,但请记住泛型和 IEnumerables 之类的东西,它们非常重要。

        【讨论】:

          猜你喜欢
          相关资源
          最近更新 更多