Код, который у вас есть в RandomValues
, возвращает список случайных значений из словаря, а не фактических словарных записей, то есть пар ключ / значение. По сути, вы пытаетесь привести IEnumerable
к Dictionary
, что невозможно сделать неявным образом.
Следующий код должен делать то, что вы хотите:
public IDictionary<TKey, TValue> RandomValues<TKey, TValue>(IDictionary<TKey, TValue> dict, int count)
{
if (count > dict.Count || count < 1) throw new ArgumentException("Invalid value for count: " + count);
Random rand = new Random();
Dictionary<TKey, TValue> randDict = new Dictionary<TKey, TValue>();
do
{
int index = rand.Next(0, dict.Count);
if (!randDict.ContainsKey(dict.ElementAt(index).Key))
randDict.Add(dict.ElementAt(index).Key, dict.ElementAt(index).Value);
} while (randDict.Count < count);
return randDict;
}
Обратите внимание, что теперь вам нужно указать количество записей, которые вы хотите использовать в качестве аргумента. Возвращаемым значением будет словарь с count
случайными, уникальными записями из оригинала.