2016-06-02 2 views
2
public static Dictionary<string,string> qData = new Dictionary<string,string>(); 
protected void Page_LoadComplete(object sender, EventArgs e) 
{ 
    qData.Add("businessName",Request.QueryString["businessName"]); 
} 
protected void craCHeck(object sender, EventArgs e) 
{ 
    string value = ""; 
    value = qData["businessName"]; 
} 

Если я не комментирую qData.Add, он говорит, что ключ уже добавлен. Если я прокомментирую это, он говорит, что ключ не найден ... очень смущен и расстроен, не знаю, что я делаю неправильно. :/Хранение и извлечение словарей

+2

Это все код, который у вас есть? Кажется, у нас пропали некоторые кусочки головоломки. – DGibbs

ответ

0

ключ может уже exsists, в зависимости от контекста вызова проще всего сделать, это проверить, если ключ существует, прежде чем добавить его

if (!qData.ContainsKey(key)) 
{ 
    qData.Add("businessName",Request.QueryString["businessName"]); 
} 

и при чтении из словаря, проверьте ключ есть

if (qData.ContainsKey(key)) 
{ 
     value = qData["businessName"]; 
} 
4

Вы должны проверить, если ключ уже существует в словаре:

if(qData.ContainsKey("businessName")) 
    qData["businessName"] = Request.QueryString["businessName"]; 
else 
    qData.Add("businessName", Request.QueryString["businessName"]); 

Add метод не добавить или обновить пару с ключом, но это просто добавляет его. В противном случае, если ключ уже присутствует в данном словаре , вам необходимо использовать индекс, как показано в приведенном выше примере кода .

Или даже лучше. Проверьте, что MSDN states об общем указателе словаря:

Значение, связанное с указанным ключом. Если указанный ключ не найден не найден, операция get генерирует исключение KeyNotFoundException, а операция set создает новый элемент с указанным ключом.

Таким образом, вы можете упростить код следующим образом:

// No need of using Add() or the indexer. You can 
// just use the indexer instead in either case: 
qData["businessName"] = Request.QueryString["businessName"]; 
+2

Есть ли причина проверить, существует ли ключ? Почему бы просто не использовать строку 'qData [" businessName "] = ...' самостоятельно? Индексатор добавит его, если он не существует. – Kyle

+0

@Kyle Обновлено, вы правы;) –

0
protected void Page_LoadComplete(object sender, EventArgs e) 
{ 
    qData["businessName"] = Request.QueryString["businessName"]); 
} 
protected void craCHeck(object sender, EventArgs e) 
{ 
    string value = ""; 
    qData.TryGetValue("businessName", out value)) 
} 

Но фиксированный ключ "BusinessName" просто делает нет смысла мне

string queryString = string.empty; 
protected void Page_LoadComplete(object sender, EventArgs e) 
{ 
    queryString = Request.QueryString["businessName"]); 
} 
protected void craCHeck(object sender, EventArgs e) 
{ 
    string value = queryString; 
} 
Смежные вопросы