2012-08-29 33 views
68

Làm thế nào tôi có thể nhận được giá trị từ điển bằng phím chức năng trênnhận được giá trị từ điển bằng phím

mã chức năng của tôi là thế này (và lệnh gì tôi cố gắng nhưng đã không làm việc):

static void XML_Array(Dictionary<string, string> Data_Array) 
{ 
    String xmlfile = Data_Array.TryGetValue("XML_File", out value); 
} 

của tôi nút này đang

private void button2_Click(object sender, EventArgs e) 
{ 
    Dictionary<string, string> Data_Array = new Dictionary<string, string>(); 
    Data_Array.Add("XML_File", "Settings.xml"); 

    XML_Array(Data_Array); 
} 

tôi muốn một cái gì đó như thế này:
trên XML_Array chức năng để được
chuỗi xmlFile = settings.xml

+1

đừng quên để đánh dấu một câu trả lời như một giải pháp chấp nhận được cho vấn đề của bạn, nếu nó giúp bạn. 'gợi ý' này cũng liên quan đến các câu hỏi trước của bạn. http://meta.stackexchange.com/a/5235 – varg

+4

... và không sử dụng dấu gạch dưới trong tên biến của bạn, nó quá xấu xí! – Guillaume

Trả lời

97

Nó cũng đơn giản như thế này:

String xmlfile = Data_Array["XML_File"]; 

Lưu ý rằng nếu từ điển không có một chìa khóa đó bằng "XML_File", mã mà sẽ ném một ngoại lệ. Nếu bạn muốn kiểm tra trước, bạn có thể sử dụng TryGetValue như sau:

string xmlfile; 
if (!Data_Array.TryGetValue("XML_File", out xmlfile)) { 
    // the key isn't in the dictionary. 
    return; // or whatever you want to do 
} 
// xmlfile is now equal to the value 
+2

người đàn ông tuyệt vời cảm ơn bạn! đây là những gì tôi đã tìm kiếm –

20

Đó không phải là cách hoạt động của TryGetValue. Nó trả về true hoặc false dựa trên việc khóa có được tìm thấy hay không và đặt tham số out của nó thành giá trị tương ứng nếu khóa đó ở đó.

Nếu bạn muốn kiểm tra xem phím là có hay không và làm điều gì đó khi nó mất tích, bạn cần một cái gì đó như thế này:

bool hasValue = Data_Array.TryGetValue("XML_File", out value); 
if (hasValue) { 
    xmlfile = value; 
} else { 
    // do something when the value is not there 
} 
4
static void XML_Array(Dictionary<string, string> Data_Array) 
{ 
    String value; 
    if(Data_Array.TryGetValue("XML_File", out value)) 
    { 
    ... Do something here with value ... 
    } 
} 
2
static String findFirstKeyByValue(Dictionary<string, string> Data_Array, String value) 
{ 
    if (Data_Array.ContainsValue(value)) 
    { 
     foreach (String key in Data_Array.Keys) 
     { 
      if (Data_Array[key].Equals(value)) 
       return key; 
     } 
    } 
    return null; 
} 
2
  private void button2_Click(object sender, EventArgs e) 
      { 
       Dictionary<string, string> Data_Array = new Dictionary<string, string>(); 
       Data_Array.Add("XML_File", "Settings.xml"); 

       XML_Array(Data_Array); 
      } 
      static void XML_Array(Dictionary<string, string> Data_Array) 
      { 
       String xmlfile = Data_Array["XML_File"]; 
      } 
0

tôi sử dụng một phương pháp tương tự để dasblinkenlight trong một hàm trả về một giá trị khóa duy nhất từ ​​một Cookie chứa một mảng JSON được tải vào một từ điển như sau:

/// <summary> 
    /// Gets a single key Value from a Json filled cookie with 'cookiename','key' 
    /// </summary> 
    public static string GetSpecialCookieKeyVal(string _CookieName, string _key) 
    { 
     //CALL COOKIE VALUES INTO DICTIONARY 
     Dictionary<string, string> dictCookie = 
     JsonConvert.DeserializeObject<Dictionary<string, string>> 
     (MyCookinator.Get(_CookieName)); 

     string value; 
     if (dictCookie.TryGetValue(_key, out value)) 
     { 
      return value; 
     } 
     else 
     { 
      return "0"; 
     } 

    } 

Trường hợp "MyCookinator.Get()" là một chức năng Cookie đơn giản khác nhận được một giá trị tổng thể của cookie http.

16

Tại sao không chỉ cần sử dụng tên phím trên từ điển, C# có này:

Dictionary<string, string> dict = new Dictionary<string, string>(); 
dict.Add("UserID", "test"); 
string userIDFromDictionaryByKey = dict["UserID"]; 

Nếu bạn nhìn vào những gợi ý tip:

enter image description here

0

Dưới đây là ví dụ mà tôi sử dụng trong nguồn của tôi mã. Tôi nhận được khóagiá trị từ Từ điển từ phần tử 0 đến số phần tử trong Từ điển của tôi. Sau đó, tôi điền vào mảng chuỗi [] của tôi mà tôi gửi dưới dạng tham số sau trong hàm của tôi chỉ chấp nhận tham số chuỗi []

Dictionary<string, decimal> listKomPop = addElements(); 
    int xpopCount = listKomPop.Count; 
    if (xpopCount > 0) 
    { 
     string[] xpostoci = new string[xpopCount]; 
     for (int i = 0; i < xpopCount; i++) 
     { 
      /* here you have key and value element */ 
      string key = listKomPop.Keys.ElementAt(i); 
      decimal value = listKomPop[key]; 

      xpostoci[i] = value.ToString(); 
     } 
    ... 

Hy vọng điều này sẽ giúp bạn và những người khác. Giải pháp này làm việc với SortedDictionary cũng.

Trân trọng!

Ozren Sirola

0
Dictionary<String,String> d = new Dictionary<String,String>(); 
     d.Add("1","Mahadev"); 
     d.Add("2","Mahesh"); 
     Console.WriteLine(d["1"]);// it will print Value of key '1' 
Các vấn đề liên quan