2013-04-26 5 views
1

Я пытаюсь объединить 3 разных значения в app.config, чтобы они коррелировали.Split Strings в словаре

<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

Что бы тип данных для ключа и значения ключа возвращаемой для ваш словарь, если вы можете заставить все это работать? –

+0

Зависит ли ваш пользователь от ключа, который вы хотите найти? Если бы кортеж не был более подходящим или фактическим классом. –

ответ

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); 

EDIT: Вы также можете сделать быструю проверку, чтобы убедиться, что у вас есть необходимое количество соответствующей информации, а также, прежде чем строить свои объекты:

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

Если ключ является свойством, то это то, что предназначен для KeyedCollection. – Paparazzi

+0

@Blam Да, конечно, я полагаю. Но кажется немного тупым создать целый подкласс «KeyedCollection» только для того, чтобы в любом случае обернуть объект Dictionary, который легко создается с помощью утилиты Linq 'ToDictionary' в любом случае. –

Смежные вопросы