Тот факт, что у вас есть эти два небольших целочисленных значения, которые объединяются, чтобы что-то значить (по крайней мере, цвет), подсказывает мне, что для вас может иметь смысл определить структуру, инкапсулирующую их.
Преимущество этого состоит в том, что вы можете использовать структуру в качестве ключа к словарю: методы Equals и GetHashCode уже должны работать адекватно.
Ниже приведен пример. Поскольку вы упомянули, что цвета не могут быть рассчитаны, я оставил комментарий, в котором необходимо заполнить словарь; Вы можете жестко закодировать это, но в идеале вы должны прочитать значения из файла или встроенного ресурса.
РЕДАКТИРОВАТЬ: обновил мой пример структуры, чтобы быть неизменным.
struct MyStruct
{
private byte _X;
private byte _Y;
public MyStruct(byte x, byte y)
{
_X = x;
_Y = y;
}
public byte X { get { return _X; } }
public byte Y { get { return _Y; } }
private static Dictionary<MyStruct, Color> _ColorMap;
static MyStruct()
{
_ColorMap = new Dictionary<MyStruct, Color>();
// read color mapping from somewhere...perhaps a file specific to the type of LED
}
public Color GetColor()
{
return _ColorMap[this];
}
}