What was the problem you had with Dictionary?
I use them a fair deal in my code but do not tend to pass them around. I prefer to pass their lookup function around. So if I have a Dictionary<int, Person> I will pass around a Func<int, Person>
That way I do not care what the storage is :)
Unity is a different space as threaded, the C# collections are not thread safe
RE: C# Tutorial 006: Lists & Arrays