2012-09-18 62 views
0

以下列表是在名为“实体”的类中创建的,它们是私有的。 我想回报他们(以及其他类使用),我可以这样做:返回多个列表

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"); 
+0

无论如何,我宁愿10个...方法。但是如果你想用一个键来得到一个列表,你应该使用一个枚举类似'enum ListKey {exceptionCM,exceptionMultiB,exceptionMulti01}'而不是一个字符串。 – thersch

回答

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; } 
+0

然后我怎样才能从另一个班级打电话给他们? 只需创建一个类的实例? –

+1

就像EntitiesObject.exceptionsCM一样简单:-) – slawekwin

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]; 
} 
+0

谢谢@oleksii –

2

你可以把你所有的列表中的字典:

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

随后的GetList方法如此简单:

public List<string> getList(string name) 
{ 
    return dictionary[name]; 
} 
+0

谢谢@DanielR –

0

使用字典和枚举。

使用枚举的列表键,而不是一个使你的代码键的重命名更​​加稳健。即当您重命名MultiBMultiB1 in 实体类然后编译器不会显示关于调用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); 
    } 
}