BillWoodruff
"The problem with dictionary is that if i change the order of the instances, then even the ID changes."
Это утверждение не имеет смысла. Хотя это правильно, что вы должны
никогда не полагайтесь на KeyValuePairs в словаре, находящихся в том же" порядке", в котором вы их помещаете (или в любом другом порядке), использование словаря гарантирует ... в силу того, что он не допускает дубликатов ключей ... что каждый ключ уникален.
Я думаю (думаю), что вам нужен уникальный идентификатор (int) для каждого экземпляра класса; один из способов сделать это -:
using System.Collections.Generic;
namespace YourNameSpace
{
public class AB
{
private static int AB_ID = 0;
public static Dictionary<AB, int> ABInstanceToID = new Dictionary<AB, int>();
public int ID { set; get; }
public AB()
{
this.ID = AB_ID;
ABInstanceToID.Add(this, this.ID);
AB_ID++;
}
}
}
Таким образом, учитывая экземпляр AB во время выполнения, вы можете прочитать его идентификатор, выполнив поиск в статическом словаре:
if(AB.ABInstanceToID.ContainsKey(someAB))
{
int index = AB.ABInstanceToID[someAB];
switch(index)
{
case 0:
// handle case O
break;
default:
break;
}
}
else
{
// throw an error ?
// put up a warning with a MessageBox ?>
}
Примечание:
1.in "теория" тест "ContainsKey" не должен быть необходим, но я думаю, что это всегда хорошая идея, чтобы проверить и перепроверить, и планировать ошибки.
2. в то время как некоторые могут предпочесть использование словаря.TryGetValue для проверки, в данном случае, когда мы можем предположить, что частые попытки поиска отсутствующих ключей очень маловероятны, я не вижу причин использовать это здесь.