2011-08-25 18 views
5

静的クラスの一部の文字列値には、ConfigurationManagerを使用します。しかし、私は特に値の欠如や空の値の存在を扱う必要があります。今はタイプイニシャライザを使用していました。例えば、ConfigurationManagerと静的クラス

private static readonly string someStr = ConfigurationManager.AppSettings["abc"]; 

などです。しかし、キー "abc"を持つ文字列がApp.configに存在しない場合は、someStrの代わりにnullの参照が続行されます。初期化時にこの値を検証する最良の方法は何ですか?私は値を初期化し、次に妥当性をチェックする静的コンストラクタですか?可能であれば静的コンストラクタは避け、型初期化子に置き換えてください。

答えて

6

私はこのようなものを使用しています:

public static readonly string someStr = 
     ConfigurationManager.AppSettings["abc"] ?? "default value"; 

または空の文字列を処理する:

public static readonly string someStr = 
      !String.IsNullOrEmpty(ConfigurationManager.AppSettings["abc"]) ? 
          ConfigurationManager.AppSettings["abc"] : "default value"; 
2

静的コンストラクタは大丈夫です、それらについての素晴らしいところは、彼らががでを保証していることですランタイムは一度だけ実行されます - クラスがどのような状況でも最初に使用されます。

あなたは、代わりにデフォルト値を設定するために合体演算子(??)を使用することができます

private static readonly string someStr = ConfigurationManager.AppSettings["abc"] ?? "some default value"; 
4

これは単にコードレビューで思い付きました。提供される回答は、文字列に適しています。しかし、intやdoubleなどでは動作しません...今日、私は再試行回数のためにこれを行う必要があり、intでなければなりません。

ここには、タイプ変換が必要な人のための答えがあります。

使用この拡張方法:http://www.rhyous.com/2015/12/02/how-to-easily-access-a-web-config-appsettings-value-with-a-type-and-a-default-value

希望隣の男に役立ちます:

using System.Collections.Specialized; 
using System.ComponentModel; 

namespace Rhyous.Config.Extensions 
{ 
    public static class NameValueCollectionExtensions 
    { 
     public static T Get<T>(this NameValueCollection collection, string key, T defaultValue) 
     { 
      var value = collection[key]; 
      var converter = TypeDescriptor.GetConverter(typeof(T)); 
      if (string.IsNullOrWhiteSpace(value) || !converter.IsValid(value)) 
      { 
       return defaultValue; 
      } 

      return (T)(converter.ConvertFromInvariantString(value)); 
     } 
    } 
} 

私はまた、あなたがここに見つけることができるそれのためのユニットテストを、持っています。

+0

これは私のRhyous.Collections NuGetパッケージに入っています.GitHubでソースを見ることができます:https://github.com/rhyous/Collections/blob/master/src/Rhyous.Collections/Extensions/NameValueCollectionExtensions.cs – Rhyous

関連する問題