2009-04-07 16 views
1

配列が返されていますが、プログラミングには新しいので、各値の読み方を理解できません。誰かが私を正しい方向に向けることができますか?C#返された配列の各値を読み取る

私のコードは以下の通りです。

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

おかげで、すべての

答えて

2

まず、配列は返されず、ArrayListインスタンスが返されます。次に、なぜ名前がintになるのでしょうか?確かにstringを意味しますか?最後に、.NET 2.0以降であれば、ジェネリックを使用してコードを改善できます。したがって、ArrayListではなくList<string>を使用してください。ここ

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

私は見てintを見ることができませんでした、それは文字列だったはずです。ありがとう – Scott

+0

GetNames()関数のシグネチャがIEnumerableを返す場合はさらに良い

0

はむしろArrayListを使用するよりも、List<int>を使用してみてください。

foreachステートメントでは、キャスト例外が発生していると思います。 getNames()の本文を省いているので、これを伝えるのは難しいです。

2

問題はによりgetNamesは、ArrayListのオブジェクト --not intのを返すということです。

この変更で、あなたのコードを書き換えることができます:

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のために使用します。また、他の人が気づいたように、stringからintに変更しました。

+0

foreachはキャストを試み、失敗した場合にスローします。 –

0

代わりにintのリストを返してください。このように:

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

どちらかその、またはあなたがlist.addのような何もしていませんでしたので、それはあなたのリスト内のintのは、本当にだことを確認してください(「5」)。その後、5はintではなく文字列になります。

-1

この状態で始めることがあります。

String key, val; 

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

EDIT:foreachのバージョンにするIEnumeratorのバージョンを削除するために更新しました。

+0

これは、実装では親が抽象であったために投稿されました。 GetEnumerator()を使用するのは、ArrayLists、HashTablesなどのオブジェクトを使って正しく動作する方法です。 – Wayne

+0

列挙子で作業したい場合でも、foreachを使用することができます。よりシンプルで表現力豊かで、whileループよりコンパイラの最適化がよりオープンです。私は(によりgetNamesと呼ばれている機能について理解)それは、我々は文字列を返すようになっていることを前提としなければならないという意味ではありません - また、あなたは「文字列の代わりにint型の」バグ – philsquared

+0

@Philを修正しませんでした。私はIEnumerableを実装して答えた理由厥。我々はすべてここにいる理由限り、親が学ぶことができるよう、thatsの:) – Wayne

0

ArrayListはアイテムをオブジェクトとして格納します。したがって、必要な型(あなたの場合はint)にunboxする必要があります。しかし、なぜintと名前の文字列ではない?

関連する問題