无法从列表键C#中获取值

时间:2014-08-09 18:19:05

标签: c# winforms

我尝试通过键获取列表中的值。我将列表从一个表单发送到另一个表单。这是windows表单应用程序请参阅我的代码:

    /* 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!解决方案:

    /* 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"];

    }

4 个答案:

答案 0 :(得分:5)

如果您需要通过key访问值,则应使用密钥集合,例如Dictionary。列表只能通过索引访问,它没有定义一个以字符串作为参数的索引器。

除此之外,默认情况下密钥区分大小写。如果您需要不敏感密钥,可以use this

答案 1 :(得分:1)

如果您不关心案例,可以在设置或使用密钥时使用String.ToLowerString.ToUpper方法。

如果您想通过Dictionary<String, Int32>访问您的值,则应使用string index

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

答案 2 :(得分:0)

如果你想按键查找,你不需要      List<KeyValuePair<string, int>>你想要一个     Dictionary<string, int>。因此,请替换List<KeyValuePair<string, int>>的所有出现,并且如上所述,您的密钥区分大小写。

for Lists [n]索引器想要一个int并用于获取List中的第n个项

答案 3 :(得分:0)

你应该为此使用一个字典,它通过散列键来优化这一点,以便更快地检索。

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

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