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 forSystem.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实现来回答。只要家长能够学习,这就是为什么我们都在这里:)