2013-04-26 134 views
1

我试图在app.config中加入3个不同的值,以便它们相互关联。将字符串拆分为字典

<add key="User" value="User1,User2,User3,Pass4" /> 
<add key="Pass" value="Pass1,Pass2,Pass3,Pass4" /> 
<add key="Location" value="Location1,Location2,Location3,Location4" /> 

var User = ConfigurationManager.AppSettings.Get("User").Split(new[] { ',' }); 
var Pass = ConfigurationManager.AppSettings.Get("Pass").Split(new[] { ',' }); 
var Location = ConfigurationManager.AppSettings.Get("Location").Split(new[] { ',' }); 

我没有麻烦做一个逗号分割,以获得每个键的每个值。我想要做的是让User1与Pass1和Location1一起去。这是我可以通过散列表/字典轻松完成的事情吗?如果是这样,最简单的方法是什么?

+0

什么是对的关键返回键和值数据类型你的字典,如果你能使这一切工作? – 2013-04-26 02:01:13

+0

取决于您的用户是否想要查找关键字?如果不是元组可能更合适或实际的类。 – 2013-04-26 02:01:33

回答

8

的最好办法很可能是定义一个类来保存它们:

public class UserInfo 
{ 
    public string User { get; private set; } 
    public string Pass { get; private set; } 
    public string Location { get; private set; } 

    public UserInfo(string user, string pass, string location) 
    { 
     this.User = user; 
     this.Pass = pass; 
     this.Location = location; 
    } 
} 

然后一个简单的循环来构建它们:

List<UserInfo> userInfos = new List<UserInfo>(); 
for(int i = 0; i < User.Length; i++) 
{ 
    var newUser = new UserInfo(User[i], Pass[i], Location[i]); 
    userInfos.Add(newUser); 
} 

然后,如果你没有想查找表或字典基于说,User

Dictionary<string, UserInfo> userLookup = userInfos.ToDictionary(userInfo => userInfo.User); 

编辑:您可能还希望做一个快速检查,以确保您有相应的信息进行适当的数额以及你建立你的对象之前:

if (User.Length != Pass.Length || User.Length != Location.Length) 
    throw new Exception("Did not enter the same amount of User/Pass/Location data sets!"); 
+0

如果Key是一个属性,那么这就是KeyedCollection的设计目的。 – Paparazzi 2013-04-26 02:07:22

+0

@布拉姆是的,当然我想。但似乎有点迟钝,无论如何创建'KeyedCollection'的整个子类只是为了包装一个Dictionary对象,无论如何,它很容易通过Linq'ToDictionary'实用方法创建。 – 2013-04-26 13:13:48