0

重複の可能性:
ジャグ配列に新しい配列を挿入する方法

配列の長さで文字列配列変数を作成する方法がわからないという問題があります。

私は今このコードを下に持っています:

string[] p = new string[10];
int num = 0;

foreach (Product products in GetAllProducts())
    {
     //do something
     p[num]= "some variable result"
     num++
    }

問題は、「p」がいくつ取得されるかわからないことです。少なくとも10未満になることはわかっていますが、0に設定すると、起動時にエラーが発生します。 「p[num]」がわからないので、「p」の長さを可変にする方法を探しています。

誰かが私を少し助けることができますか?ありがとう

============解決済み==========

List<string> p = new List<string>();
int num = 0;

foreach (Product products in GetAllProducts())
    {
     string s= null;
     //do something ( create s out of multiple parts += s etc.)
     p.add(s)
     num++
    }

ソリューションポスターに感謝します

4

8 に答える 8

10

List<string>追加する必要のあるアイテムの数がわからない場合は、配列の代わりに使用してください。

于 2012-08-03T11:24:45.713 に答える
1

配列の長さは、インスタンス化された後で変更することはできません。ArrayListまたはGenericListsを使用します。

于 2012-08-03T11:25:00.693 に答える
0
var p = new new List<string>(10);
foreach (Product products in GetAllProducts()) 
{ 
    //do something 
    p.Add("some variable result"); 
} 
于 2012-08-03T11:25:23.627 に答える
0

何がGetAllProducts()返されますか?カウントや長さはありますか?!最初にそれを呼び出し、変数に保存し、カウント/長さを取得してから、配列を宣言する必要があります。

于 2012-08-03T11:27:40.533 に答える
0

2つの解決策があります。

配列を使い続けたい場合:

int num = 0;
var list = GetAllProducts();
string[] p = new string[list.Length]; // Or list.Count if this is a collection

foreach (Product products in list)
{
    //do something
    p[num] = "some variable result";
    num++;
}

それ以外の場合は、次のようなリストを使用する必要があります。

List<string> p = new List<string>();

foreach (Product products in GetAllProducts())
{
    //do something
    p.Add("some variable result");
}
于 2012-08-03T11:27:51.847 に答える
0

Array.Resize()メソッドを使用します。これにより、サイズを(n個のインデックスで)変更できます。私の例では、方法の各ステップで1ずつサイズを変更します。

        string[] array = new string[3]; //create array
        for (int i = 0; i < 5; i++)
        {
            if (array.Length-1 < i) //checking for the available length
            {
                Array.Resize(ref array, array.Length + 1); //when to small, create a new index
            }
            array[i] = i.ToString(); //add an item to array[index] - of i
        }
于 2012-08-03T11:32:29.237 に答える
0

コードはGetAllProductsからの結果にforeachを使用しているため、GetAllProductsはIEnumerableコレクションを返す必要があります。おそらく最善の解決策は、GetAllProductsの結果をそのようなコレクションに割り当てることです。たとえば、おそらくそれはすでに文字列のリストを返しますか?だからあなたはすることができます:

List<string> strings = GetAllProducts();

GetAllProductsからコレクションが返される場合は、配列を作成するためにforeachループを作成する必要はありません。

または単に:

var strings = GetAllProducts();

コンパイラに文字列のタイプを処理させるため。

配列で実行できるほとんどのことは、リストでも実行できます。さらにいくつかのこと(リストの最後に項目を追加するなど)もあります。

おそらく、GetAllProductsの署名(特にそのリターンタイプ)を投稿して、より適切にアドバイスできるようにすることができますか?

于 2012-08-03T11:38:23.960 に答える
0

私は多くの人があなたにリストの使用である正しい答えを与えたのを見ます。それでも最終的に配列が必要な場合は、リストを次のような配列に簡単に変換できます。

    string[] tempArray = myList.ToArray();
于 2012-08-03T12:35:05.423 に答える