(TKey, TValue)[],TKey[] and TValue[].KeyValuePair<TKey, TValue>s).IReadOnlyDictionary<TKey, TValue> to be precise) without actually building the Dictionary the moment I receive it.Dictionary<TKey, TValue> with the data, which may be quite large. Doing this would potentially delay the update loop unnecessarily (not actually needing all the data, since only a selection of it will be accessed).HashSet<TKey>. This, however, would add an extra allocation, would need to do potentially unnecessary computation, and would require some pretty bad logic for the tuple array data.