Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#读取返回数组的每个值_C#_Arrays - Fatal编程技术网

C#读取返回数组的每个值

C#读取返回数组的每个值,c#,arrays,C#,Arrays,我有一个数组被返回,但由于我是编程新手,我不知道如何读取每个值。有人能给我指一下正确的方向吗 我的代码如下 private void testToolStripMenuItem_Click(object sender, EventArgs e) { foreach (int name in getNames()) //<----I'm wrong here I guess { MessageBox.Show(name.ToString()); } } private Arr

我有一个数组被返回,但由于我是编程新手,我不知道如何读取每个值。有人能给我指一下正确的方向吗

我的代码如下

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;
}
private void testToolStripMenuItem\u单击(对象发送方,事件参数e)
{

foreach(getNames()中的int name)/不要使用
ArrayList
,请尝试使用
List

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

我猜在foreach语句中,您遇到了一个cast异常。很难说出来,因为您遗漏了
getNames()的主体

首先,您没有返回数组,而是返回一个
ArrayList
实例。其次,为什么名称是
int
?您的意思当然是
string
?最后,如果您在.NET 2.0或更高版本上,您可以使用泛型来改进代码。因此,使用
List
而不是
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;
}
private void testToolStripMenuItem\u单击(对象发送方,事件参数e)
{
foreach(getNames()中的字符串名称)
{
MessageBox.Show(名称);
}
}
私有列表GetNames()
{
变量名称=新列表();
名称。添加(“肯特”);
返回姓名;
}

这里的问题是getNames返回对象的arraylist,而不是int

您可以使用以下更改重写代码:

 foreach (object nameobj in getNames())
 {
    string name = (string)nameobj;
    MessageBox.Show(name);
 }
或者,您可以(也应该)使用泛型来保持一切整洁

private void testToolStripMenuItem\u单击(对象发送方,事件参数e)
{
foreach(getNames()中的字符串名称)
{
MessageBox.Show(名称);
}
}
私有IList getNames()
{
//一些代码。。。
列表名称=新列表();
名称。添加(“斯科特”);
..
...
返回姓名;
}

添加一个using for
System.Collections.Generic
。另外,正如其他人所注意到的,我将其从
int

改为
string
,尝试返回一个int列表。如下所示:

private List<int> getNames()
{
    //some code...
     ..
     ...
     return names;
}
private List getNames()
{
//一些代码。。。
..
...
返回姓名;
}

或者检查列表中是否确实有int,这样您就没有执行类似list的操作。添加(“5”)。然后5将是字符串,而不是int。这可能会让您开始:

String key, val;

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

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

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

如果失败,foreach将尝试强制转换并抛出。我看不到用于查找的int,它应该是string。如果GetNames()函数签名返回IEnumerableth更好,因为在实现中父级是抽象的。使用GetEnumerator()是处理这些对象(如ArrayList、HashTables等)的正确方法。即使您想使用枚举器,您仍然可以(也应该)使用foreach。与while循环相比,它更简单、更具表现力,并且更易于编译器优化。此外,您没有修复“字符串而不是int” bug@Phil-我理解函数被称为getNames(),但这并不意味着我们应该假设它应该返回字符串。这就是为什么我用IEnumerable实现来回答。只要家长能够学习,这就是为什么我们都在这里:)