4

App.configファイルから接続文字列を読み取っています。そのために、次のコードがあります。

try
 {
    string[] dbnames;
    int counter = 0;
    foreach (ConnectionStringSettings connSettings in ConfigurationManager.ConnectionStrings) 
    {
        dbnames[counter] = connSettings.Name;
        counter++;
    }
    return dbnames;
 }
 catch
 {
    throw;
 }

このコードは、dbnamesに割り当てられていないローカル変数の使用エラーを表示します。App.configに複数の接続文字列があります。なし、1、2などにすることができます。必要に応じて。したがって、dbnameサイズを静的に割り当てることはできません。割り当てられたサイズの値を超えるとシナリオが発生する可能性があるためです。例えば。サイズを5に割り当てた場合、6番目の接続文字列を取得した場合はどうなりますか。そして、私が1を持っている場合、残りの4はメモリの浪費になります。

私が間違っている場合は、私に知らせてください。

ありがとう。

4

5 に答える 5

13

アレイの初期化中にこれを使用します。

 string[] dbnames = new string[ConfigurationManager.ConnectionStrings.Count];

または使用List<string>

于 2011-01-27T10:47:57.790 に答える
5

System.Arrayこのように動的にサイズを変更することはできません。

幸いなことに、そうする理由はありません。List<T>代わりに、のような別のタイプのコレクションを使用してください。(名前空間のusing宣言を追加したことを確認してください!)System.Collections.Generic

配列と同様に、aをList<T>使用すると、インデックスでリスト内の要素にアクセスできますが、実行時に動的にサイズ変更できるため、質問の要件を満たします。そしてもちろん、これは一般的な方法であるため、強く型付けされるという追加の利点があります(他の選択肢のいくつかと比較して)。stringタイプを使用しているので、を使用しますList<string>

編集:その空のtry/catchブロックは絶対に必要ありません。すぐに例外を取り戻すつもりなら、なぜ例外をキャッチするのですか?泡立ててください。一般に、例外をキャッチするのは、直接の原因を修正できない限り、例外をキャッチするべきではありません。

于 2011-01-27T10:47:16.637 に答える
2

dbnames文字列配列として宣言していますが、サイズを定義していません。

次のようなものが必要になります。

string[] dbames = new string[4];

ここで、「4」は配列の長さです。

ただし、可変長が必要な場合は、を使用する必要がありますList<string>。この場合、必要に応じて追加できます。

于 2011-01-27T10:47:41.170 に答える
1

他の人が言っているように、あなたはただを使うことができますList<string>。ただし、.NET 3.5以降を使用している場合は、LINQを使用してこれらすべてを実行します。

return ConfigurationManager.ConnectionStrings
                           .Cast<ConnectionStringSettings>()
                           .Select(setting => setting.Name)
                           .ToArray(); // Or ToList
  • No need for a foreach loop (in your code - obviously it's there somewher :)
  • You can easily decide whether to return a list, an array, or simply IEnumerable<string>
  • No need for try/catch
于 2011-01-27T10:59:20.747 に答える
1

declare it after class e.g

i am also writing code and i used to always encounter this problem

   public class ABC{
string[] array;
ABC()
{
}
//your_function_logics
}
于 2019-08-28T21:00:35.117 に答える