Rather than rely on objects, in C# it is considered good practice to use explicit objects. For example:
public class MyItem
{
public string String { get; set; }
public int Int { get; set; }
public MyItem(string s, int i) { String = s; Int = i; }
public override string ToString()
{
return "MyItem: " + String;
}
}
private void myForm_Load(object sender, EventArgs e)
{
MyItem[] list = new MyItem[2];
list[0] = new MyItem("Hello", 1);
list[1] = new MyItem("Goodbye", 2);
myComboBox.Items.AddRange(list);
}
private void myButton_Click(object sender, EventArgs e)
{
MyItem mi = (MyItem)myComboBox.Items[1];
Console.WriteLine(mi.String + mi.Int);
}
What this does is put the whole of your item into the ComboBox - the displayed string comes from the overridden ToString method - and you can access all the properties you want when you get the item from the ComboBox.
Personally, I would use a List rather than an array to init the ComboBox, but you seemed to use an array, so that is what I showed.
private void myForm_Load(object sender, EventArgs e)
{
List<MyItem> list = new List<MyItem>();
list.Add(new MyItem("Hello", 1));
list.Add(new MyItem("Goodbye", 2));
myComboBox.Items.AddRange(list.ToArray());
}