0

アプリケーションごとにグローバルである場合、データをコレクションにロードする最良の方法は何かを考えています。

public static class ErrorValues
{
        public static readonly Dictionary<int, string> errorInfo = new Dictionary<int, string>
        {
            {0, "Error 404"},
            {1, "Error 500"},
            {2, "Error 301"}
        };
}

またはこのように

public static class ErrorValues
{
    public static Dictionary<int, string> errorInfo;

    static ErrorValues()
    {
      if (errorInfo == null)
      {
        errorInfo = LoadDataToDictionary();
      }
   }
}

より良い解決策?なんで?

4

3 に答える 3

3

データが静的な場合は、意味のある型を作成することをお勧めします

例:

public class ErrorValue
{
    private static Dictionary<Int32, ErrorValue> _errors;

    public static readonly ErrorValue Error404 = new ErrorValue(404, "Error 404");
    public static readonly ErrorValue Error500 = new ErrorValue(500, "Error 500");
    public static readonly ErrorValue Error301 = new ErrorValue(301, "Error 301");

    public String ErrorName { get; private set; }
    public Int32 ErrorCode { get; private set; }

    private ErrorValue(Int32 errorCode, String errorName)
    {
        if (_errors == null)
            _errors = new Dictionary<int, ErrorValue>();

        ErrorName = errorName;
        ErrorCode = errorCode;

        _errors.Add(errorCode, this);
    }

    public static IEnumerable<ErrorValue> Errors { get { return _errors.Values; } }

    public static ErrorValue GetErrorByCode(Int32 errorCode)
    {
        return _errors[errorCode];
    }
}

これにより、 type のパラメーターを使用してメソッドを記述できるため、型の安全性によりエラーが発生しにくいコードになりますErrorValue

void HandleError(ErrorValue ev)
{ 
    // bla bla
}

もう 1 つの利点は、このアプローチを使用すると、型を簡単に拡張できることです。Descriptionたとえば、コードに大きな変更を加えることなく、のような他のプロパティを追加します。

同様の静的グローバル コレクションが必要な場合は、共通のジェネリック基本クラスを抽出して、または類似のメソッドを提供できGetByIdますGetByName

于 2012-06-22T09:17:08.113 に答える
1

beforefieldinitフラグを除いて、生成された IL に違いはないはずです。

于 2012-06-22T09:04:35.310 に答える
1

アイテムが静的/ハードコーディングされていて、DB やその他のデータ ソースからロードされない場合、最初のものは簡単だと思います。

2 つ目は、オブジェクトが 1 回だけ作成され、アプリケーションのライフ サイクル全体でそのオブジェクト参照が再利用されるアプリケーションで頻繁に使用されるシングルトン パターンを使用することです。また、他のデータ ソースからのコレクションの初期化を提案します。

結論: どちらも優れていますが、必要なものによって異なります。個人的には、デザイン パターンに従う 2 番目の方法が好きです。

于 2012-06-22T09:05:50.803 に答える