0

次のリストは「Entities」という名前のクラスで作成され、プライベートです。私はそれらを返したい(そして別のクラスで使用したい)私ができること:

    public List<string> getCMList()
    {
        return exceptionsCM;
    }

しかし、リストが10個ある場合は、それらすべてに対してパブリックな「get」メソッドを作成する必要があります。文字列を入力として受け取り、そのリストを返すメソッドを作成することは可能ですか?に似たものである必要があります。

public List<string> getList(.....)
{
     return exceptionCM;
} //if we call getList(exceptionCM).


        exceptionsCM = new List<string>();
        exceptionsCM.Add("CM12");
        exceptionsCM.Add("CM701");
        exceptionsCM.Add("CM901/CM30");
        exceptionsCM.Add("CM901K");
        exceptionsCM.Add("CM1101");
        exceptionsCM.Add("CM1101K");

        //List with Multi Mill exceptions, they are included in the new MultiB
        exceptionsMultiB = new List<string>();
        exceptionsMultiB.Add("Multi650/450");
        exceptionsMultiB.Add("Multi660/630");
        exceptionsMultiB.Add("Multi650/800");
        exceptionsMultiB.Add("Multi650/1000");

        //List with Multi Mill exceptions, they are included in the new Multi01
        exceptionsMulti01 = new List<string>();
        exceptionsMulti01.Add("Multi301");
        exceptionsMulti01.Add("Multi601");
        exceptionsMulti01.Add("Multi801");
        exceptionsMulti01.Add("Multi1001");
4

4 に答える 4

2

Dictionary<K,V>このためのクラスを使用できます

private Dictionary<string, List<<string>> dictionary = 
    new Dictionary<string, List<<string>>();

//fill that dictionary
...

//get list from a dictionary by list id
public List getList(string listId) 
{
    return dictionary[listId];
}
于 2012-09-18T09:57:06.997 に答える
2

すべてのリストを辞書に入れることができます。

// your code here
dictionary = new Dictionary<string, List<string>>();
dictionary.Add("exceptionsCM", exceptionsCM);

次に、getListメソッドは次のように単純です。

public List<string> getList(string name)
{
    return dictionary[name];
}
于 2012-09-18T09:57:37.277 に答える
2

あなたはそれらすべてを静的な辞書に入れることができます>そのように

Dictionary<string, List<string>> ListstDict = new Dictionary<string, List<string>>();
ListsDict.Add("exceptionsCM", exceptionsCM);
...

次に、次のようなメソッドを記述できます。

public List<string> GetList(string name)
{
    return ListsDict.ContainsKey(name) ? ListsDict[name] : null;
}

しかし、繰り返しになりますが、このリストを簡単に入手できる場合、このリストが非公開になることのポイントは何ですか?プライベートセッターを使用して、それらをパブリックプロパティとして宣言する方が簡単です。

public List<string> exceptionsCM { get; private set; }
于 2012-09-18T10:00:22.640 に答える
0

辞書と列挙型を使用します。

文字列の代わりにリストキーに列挙型を使用すると、キーの名前変更に対してコードがより堅牢になります。つまり、EntitiesクラスでMultiBの名前をMultiB1に変更すると、コンパイラはGetList( "MultiB")の呼び出しに関するエラーや警告を表示しません。列挙型コンパイラを使用する場合、これらのエラーが表示されます。

internal class Entities
{
    private Dictionary<ListKey, List<string>> _liststDict =
      new Dictionary<ListKey, List<string>>
        {
          {ListKey.Cm, new List<string> {"CM12", "CM701", "CM901/CM30", "CM901K", "CM1101", "CM1101K"}},
          {ListKey.MultiB, new List<string> {"Multi650/450", "Multi660/630", "Multi650/800", "Multi650/1000"}},
          {ListKey.Multi01, new List<string> {"Multi301", "Multi601", "Multi801", "Multi1001"}}
        };

    public List<string> GetList(ListKey key)
    {
      return _liststDict[key];
    }

    internal enum ListKey
    {
      Cm,
      MultiB,
      Multi01
    }
}


internal class EntitiesTester
{
    public static void Do()
    {
      Entities entities = new Entities();

      Console.Out.WriteLine("CM count = {0}", entities.GetList(Entities.ListKey.Cm).Count);
      Console.Out.WriteLine("MultiB count = {0}", entities.GetList(Entities.ListKey.MultiB).Count);
      Console.Out.WriteLine("Multi01 count = {0}", entities.GetList(Entities.ListKey.Multi01).Count);
    }
}
于 2012-09-18T10:51:35.490 に答える