【问题标题】:C# Reading each value of a returned arrayC#读取返回数组的每个值
【发布时间】:2009-04-07 12:11:49
【问题描述】:

我返回了一个数组,但由于我是编程新手,所以我不知道如何读取每个值。有人可以指出我正确的方向吗?

我的代码如下。

private void testToolStripMenuItem_Click(object sender, EventArgs e)
{
 foreach (int name in getNames()) //<----I'm wrong here I guess
 {
    MessageBox.Show(name.ToString());
 }
}

private ArrayList getNames()
{
 //some code...
 ..
 ...
 return names;
}

谢谢大家

【问题讨论】:

    标签: c# arrays


    【解决方案1】:

    首先,您返回的不是数组,而是ArrayList 实例。其次,为什么名字是int?你的意思是string?最后,如果您使用的是 .NET 2.0 或更高版本,则可以使用泛型来改进您的代码。所以,请使用List&lt;string&gt; 而不是ArrayList

    private void testToolStripMenuItem_Click(object sender, EventArgs e)
    {
        foreach (string name in getNames())
        {
            MessageBox.Show(name);
        }
    }
    
    private List<string> GetNames()
    {
        var names = new List<string>();
        names.Add("Kent");
        return names;
    }
    

    【讨论】:

    • 我看不到要查找的 int,它应该是字符串。谢谢
    • 如果 GetNames() 函数签名返回 IEnumerable 会更好
    【解决方案2】:

    这里的问题是 getNames 返回一个数组列表对象——而不是整数。

    你可以用这个改变重写你的代码:

     foreach (object nameobj in getNames())
     {
        string name = (string)nameobj;
        MessageBox.Show(name);
     }
    

    或者,您可以(并且应该)使用泛型来保持一切整洁。这可能看起来像这样(未经测试的)代码:

    private void testToolStripMenuItem_Click(object sender, EventArgs e)
    {
     foreach (string name in getNames()) 
     {
        MessageBox.Show(name);
     }
    }
    
    private IList<string> getNames()
    {
     //some code...
     List<string> names = new List<string>();
     names.Add("Scott");
     ..
     ...
     return names;
    }
    

    System.Collections.Generic 添加一个使用。此外,正如其他人所注意到的,我将其从 int 更改为 string

    【讨论】:

    • foreach 将尝试强制转换,如果失败则抛出。
    【解决方案3】:

    不要使用ArrayList,而是尝试使用List&lt;int&gt;

    我猜在 foreach 语句中,您遇到了强制转换异常。这很难说清楚,因为您遗漏了 getNames() 的正文。

    【讨论】:

      【解决方案4】:

      尝试返回一个 int 列表。像这样:

      private List<int> getNames()
      {
          //some code...
           ..
           ...
           return names;
      }
      

      要么这样,要么检查它是否真的在你的列表中,所以你没有做过像 list.add("5") 这样的事情。那么 5 将是一个字符串,而不是一个 int。

      【讨论】:

        【解决方案5】:

        ArrayList 将项目存储为对象。因此,您需要将其拆箱为所需的类型(在您的情况下为 int)。但是为什么名称是 int 而不是 string?

        【讨论】:

          【解决方案6】:

          这可能会让你开始:

          String key, val;
          
          foreach (DictionaryEntry de in myArrayList)
          {
               key = (String)de.Key;
               val = (MyObjectType)de.Value;
          }
          

          编辑:更新以将 IEnumerator 版本删除为 foreach 版本。

          【讨论】:

          • 这是发布的,因为父级在实现中是抽象的。使用 GetEnumerator() 是通过这些对象(如 ArrayLists、HashTables 等)工作的正确方法......
          • 即使您想使用枚举器,您仍然可以(并且应该)使用 foreach。与 while 循环相比,它更简单、更具表现力并且对编译器优化更开放。此外,您没有修复“字符串而不是 int”错误
          • @Phil - 我了解被称为 getNames() 的函数,但这并不意味着我们应该假设它应该返回一个字符串。这就是我回答 IEnumerable 实现的原因。只要父母可以学习,这就是我们都在这里的原因:)
          猜你喜欢
          • 1970-01-01
          • 2020-09-21
          • 2020-07-14
          • 1970-01-01
          • 2014-11-28
          • 2014-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多