If you change the ValueStatusPair Property to:
public ValueStatusPair<TValue, TStatus> this[TKey key]
{
get
{
foreach (KeyValueStatusGroup<TKey, TValue, TStatus> keyValueStatusGroup in list)
{
if (keyValueStatusGroup.Equals(key))
{
return keyValueStatusGroup.ValueStatusPair;
}
}
return null;
}
set
{
foreach (KeyValueStatusGroup<TKey, TValue, TStatus> keyValueStatusGroup in list)
{
if (keyValueStatusGroup.Equals(key))
{
keyValueStatusGroup.ValueStatusPair = value;
}
}
}
}
It will compile, but I haven't had time to test your code, or grok its design.
My impression is you are implementing a generic Tuple with three elements of certain generic types.