private void InternalGetAll(Type valueType, out string[] keys, out Array values)
{
if (!typeof(ICacheItem).IsAssignableFrom(valueType))
throw new ArgumentException("Type " + valueType.FullName + " does not implement ICacheItem", "valueType");
keys = (string[]) new ArrayList(dataTable.Keys).ToArray(typeof(string));
values = Array.CreateInstance(valueType, keys.Length);
for (int i = 0; i < keys.Length; i++)
values.SetValue(dataTable[keys[i]], i);
Array.Sort(values, keys, new CreationTimeComparer());
}