关于winforms:无法从列表键C#中获取值

Cannot get the value from list key C#

我试着用它们的键从列表中获取值。我把清单从一张表格发送到另一张表格。这是Windows窗体应用程序。请参阅我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    /* First form! */    
    var list1 = new List<KeyValuePair<string, int>>();
    list1.Add(new KeyValuePair<string, int>("Cat", 1));
    form2 f3 = new form2(connection , list1);


    /* Form2 */
    private IList<KeyValuePair<string, int>> _theList;

    public editAccount(string connection, List<KeyValuePair<string, int>> arr)
    {
        InitializeComponent();
        _theList = arr;

        label1.Text = _theList["Cat"];

    }

我想这显然是我想做的,所以任何帮助都是伟大的!

解决方法:多亏了StackOverflow用户Sriram Sakthivel!解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    /* First form*/
    Dictionary<string, string> openWith = new Dictionary<string, string>();
    openWith.Add("cat","test");
    editAccount f3 = new editAccount(connection, openWith);

    /* Form 2 */
    private Dictionary<string, string> _theList;

    public editAccount(string connection, Dictionary<string, string> arr)
    {
        InitializeComponent();
        _theList = arr;


        label1.Text = _theList["cat"];

    }

如果需要通过key访问值,则应使用键控集合,如dictionary。列表只能通过索引访问,它不定义以字符串为参数的索引器。

除此之外,默认情况下键是区分大小写的。如果你需要一把不敏感的钥匙,你可以用这个。


如果不关心大小写,可以在设置或使用键时使用string.tolower或string.toupper方法。

如果要通过字符串索引访问值,还应使用Dictionary

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var list1 = new Dictionary<string, int>();
list1.Add(new KeyValuePair<string, int>("Cat".ToUpper(), 1));
form2 f3 = new form2(connection , list1);


/* Form2 */
private IDictionary<string, Int32> _theList;

public editAccount(string connection,IDictionary<string, Int32> arr)
{
    InitializeComponent();
    _theList = arr;

    label1.Text = _theList["cat".ToUpper()].ToString();
}


您应该为此使用一个字典,它通过散列键进行优化,以便更快地检索。

也就是说,如果您想要一个列表,一个选项是对它执行一个LINQ查询。

1
_list.Where(p => p.Key =="cat");


如果你想用钥匙查东西,你就不需要你想要一个Dictionary。因此,替换所有发生的List>和,正如前面所说,您的密钥是区分大小写的。

对于列表,[n]索引器需要一个int,用于获取列表中的第n个项。