Быстрый и грязный способ - создать составной ключ из двух частей информации, например,
IDictionary<string, int> values = new Dictionary<string, int>();
int i = ...;
bool b = ...;
string key = string.Concat(i, '\0', b);
values[key] = 555;
Чтобы лучше это описать, вы можете обернуть словарь:
public class MyDict
{
private readonly IDictionary<string, int> values = new Dictionary<string, int>();
public int this[int i, bool b]
{
get
{
string key = BuildKey(i, b);
return values[key];
}
set
{
string key = BuildKey(i, b);
values[key] = value;
}
}
private static string BuildKey(int i, bool b)
{
return string.Concat(i, '\0', b);
}
}
Чтобы сделать это более надежным, инкапсулируйте составной ключ как тип, например класс, который содержит два поля, гарантируя правильное переопределение методов Equals () и GetHashCode ().