2013-04-26 281 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