1

C#2008 で ASP.NET 3.5 を使用しています。

以下のようなデータを含むテーブルがあります。

Id Code Message Details
-- ---- ------  ------------
1  111  xxxxx   xxxxxxxxxxx
2  222  yyyyy   yyyyyyyyyyy
3  333  zzzzz   zzzzzzzz

等々..

これは静的データであり、アプリケーション全体で使用したいと考えています。

以下のプロパティを持つクラスを作成しました。

public class CodeDetails
{
   public int Id { get; set; }
   public int Code { get; set; }
   public string message { get; set; }
   public string details { get; set; }
}

codeDetailsListそして、以下のようにシングルトーンにしたい別のクラスを作成しました:

public class codeDetailsList
{
    private List<CodeDetailst> lstCodeDetailst;

    private CodeDetailst()
    {
       lstCodeDetails = new List<CodeDetails>();
    }
}

今、私がやりたいことは、上記の表形式データの項目をこのシングルトン クラスのリストに追加し、アプリケーション全体でアクセスしたいということです。

私の質問は、アイテムを追加してアクセスする方法です。

4

3 に答える 3

3

Varunの答えと同様に、完全な実装をしたかっただけです。

public class CodeDetailsList
{
    private static readonly CodeDetailsList _instance = new CodeDetailsList();
    public static CodeDetailsList Instance 
    {
        get { return _instance; }
    }

    public ReadOnlyCollection<CodeDetails> lstCodeDetailst { get; private set; }

    private codeDetailsList()
    {
        var masterList = new List<CodeDetails>();

        masterList.Add(new CodeDetails(1, 111, "xxxxx", "xxxxxxxxxxx"));
        masterList.Add(new CodeDetails(2, 222, "yyyyy", "yyyyyyyyyyy"));
        //... And so on ...

        //mark the list as read only so no one can add/remove/replace items in the list
        lstCodeDetailst= masterList.AsReadOnly();
    }
}

public class CodeDetails
{
   public CodeDetails(id, code, message, details)
   {
       Id = id;
       Code = code;
       Message = message;
       Details = details;
   }

   //Mark the setters private so no one can change the values once set.
   public int Id { get; private set; }
   public int Code { get; private set; }
   public string Message { get; private set; }
   public string Details { get; private set; }
}

のコンストラクターは、CodeDetailsList最初にアクセスしようとしたときに 1 回呼び出されますInstance(クラスに他の静的メンバーがある場合、静的メンバーが最初に呼び出されたときにコンストラクターが実行されます)。

lstCodeDetaillst呼び出し元はReadOnlyCollection、リスト内のオブジェクトを追加、削除、または置換できないためです。また、現在CodeDetailsプライベートセッターがあるため、その中のすべてのアイテムも事実上「読み取り専用」です。

于 2013-08-12T05:44:15.057 に答える
1
public class CodeDetailsList
{
    public static readonly CodeDetailsList Instance = new CodeDetailsList();

    public List<CodeDetails> ListCodeDetails { get; private set; }

    private CodeDetailsList()
    {
        ListCodeDetails = new List<CodeDetails>
       {
           new CodeDetails { Id = 1, Code = 1, Details = "xxxxx", Message = "xxxxx"},
           new CodeDetails { Id = 2, Code = 2, Details = "yyyyy", Message = "yyyy"} // ...
       };
    }
}

codeDetailsList のコンストラクターでデータを初期化する必要があります。新しいインスタンスを作成しないように、コンストラクターはプライベートのままにしておく必要があります。Instanceのフィールドを使用してデータにアクセスしますCodeDetailsList

于 2013-08-12T05:33:11.880 に答える
0

Singleton クラスから意図的に getInstance() メソッドを省略しましたか? とりあえず...

追加は次のようになります。

CodeDetails codeDetails = new CodeDetails();
codeDetails.setId("id1");
codeDetails.setCode("code1");
codeDetails.setMessage("message1");
codeDetails.setDetails("details1");

(CodeDetailsList.getInstanceMethod()).add(codeDetails);

アクセスするために:

CodeDetails codeDetails = (CodeDetails)(CodeDetailsList.getInstaceMethod()).get(0);

レコード数がある場合は、ループに入れることができます

お役に立てれば

于 2013-08-12T06:29:18.950 に答える