-1

以下に示すように設定値があります

add key="Screen1" value ="Admin"
add key="Screen2" value ="Log"

将来的には、新しい画面が追加されます。C# では、これらのスクリーン名を使用して文字列の配列を作成する必要があります。これを行うにはどうすればよいでしょうか (新しい画面を追加してもコードが機能する必要があることに注意してください)。

注 1:カスタム構成を使用しないアプローチを探しています。

注 2: 名前が「Screen」で始まる構成項目は最大 10 個です。しかし、他に 10,000 個の構成項目があります。

参照

  1. 値の存在をチェックするためのより良いコード/パターン
  2. 構成セクションを読み取る一般的な方法
  3. C# で番号リストを生成する
  4. 指定されたリストから少なくとも 3 つの連番のシーケンスを検出する
  5. LINQ は計算値をキャッシュしますか?
  6. C#で2つの相対パスを組み合わせる簡単な方法はありますか?
4

3 に答える 3

3
ConfigurationManager.AppSettings.AllKeys
    .Where( key => key.StartsWith( "Screen" ) )
    .Select( key => ConfigurationManager.AppSettings[key] )

多くの設定 (たとえば、コメントで指定したように 10K) がある場合、AppSettings コレクションがキーによる検索用に最適化されているという事実から恩恵を受ける可能性があります。このためには、「Screen1」、「Screen2」、「Screen3」などを繰り返し試して、値が見つからない場合に停止する必要があります。

Enumerable.Range( 1, int.MaxValue )
    .Select( i => ConfigurationManager.AppSettings[ "Screen" + i ] )
    .TakeWhile( value => value != null )

ただし、このアプローチは、Knuth 氏が警告した「時期尚早の最適化」とまったく同じです。構成ファイルには、それほど多くの設定を含めるべきではありません。

もう 1 つの欠点: このアプローチでは、"Screen*" 設定の番号付けにギャップがないことを前提としていることを覚えておいてください。つまり、「Screen1」、「Screen2」、「Screen4」がある場合、最後の 1 つをピックアップしません。これらの設定を多数持つことを計画している場合、設定を追加または削除するたびにすべての数値を「シフト」するのは非常に不便です。

于 2012-08-02T15:31:07.653 に答える
2

この質問への回答で説明されているように、独自の構成セクションを作成します。

そうすることで、構成ファイルのコンテンツと、それがアプリケーションにどのように公開されるかを完全に制御できます。

ステップ バイ ステップのチュートリアルについては、MSDN の「ConfigurationSection を使用してカスタム構成セクションを作成する方法」も参照してください。

于 2012-08-02T14:54:36.670 に答える
0

問題を理解しているかどうかは完全にはわかりませんが、設定を列挙して、「画面」で始まるすべてを選択できます。

.NET アプリケーションでの設定の列挙をご覧ください。

于 2012-08-02T15:45:16.480 に答える