1

私は構造体の ArrayLists を使用する傾向があります。次に、foreach を使用してリストを循環させるのは非常に簡単です。

私が抱えている問題は、foreach を使用して構造の内容を変更することができず、for と乱雑な型キャストを使用する必要があることです。

((dataStructure)files[x]).name = here;

それを行うためのよりきちんとした方法はありますか?

4

4 に答える 4

13

はい、あります: untyped を使用しないArrayListでください。これらの型は非推奨であり、 のジェネリック型が優先されSystem.Collections.Genericます。あなたの場合:List<T>

ループと組み合わせてforeach構造体の値を変更することはできませんが、少なくともキャストする必要はありません。

于 2009-05-14T12:17:01.203 に答える
7

これは単純に聞こえるかもしれませんが、変更可能な値の型にはノーと言います

それらが問題の正しい解決策になることはほとんどありません。ごくわずかな例外はありますが、ほとんどの場合、クラスは行くべき道です。

さらに、実際に を使用している場合は、ArrayListすでに開封コストが発生しています... (Konrad が言うように、.NET 2.0 を使用できる場合は、ジェネリックを使用してください。)

可変構造の使用を強く主張する場合は、 のfor代わりにループを使用してくださいforeach。とにかく、とにかくクラスに変更してください。

于 2009-05-14T12:17:42.073 に答える
1

:の汎用バージョンを使用します。ArrayListList<DataStructure>

このようにして、物事はずっと良く見えます:

files[x].name = here;
于 2009-05-14T12:18:53.773 に答える
0

List <T>はい、役に立たない場合もあります。そのような場合、マニュアルの最も古いトリックが機能します。の代わりにforeach、whileループを使用する必要があります。

while (listItem.Count >0)
{
//do operation with 0th element of List Item always like
 deletefunc(lisItem[0]);
}
于 2012-08-16T08:09:03.570 に答える