Извиняюсь, я не точно ответил. Конструкция предложенная 
darkelf  DataRow[] drvariants = key;
вообще не компилируется. Я делал 
DataRow[] drvariants = (DataRow[])key;
 и вот тогда выдавало ошибку описанную выше. Хотя это, возможно, и не важно.
Согласно задаче, в keys[key] хранятся ответы студентов на тестовые вопросы. Для последующего отделения правильных.
 
 //Экземпляр clientAnswer для хранения ответов пользователей
        Hashtable clientAnswer = new Hashtable();
        //Экземпляр keys для хранения правильных ответов пользователей
        Hashtable keys = new Hashtable();
.................................................................
//Обработчик события нажатия кн. "Результат"
        private void btnCheck_Click(object sender, EventArgs e)
        {
            //Создаем счетчик
            double counter = 0;
            //Перебираем все ключи экземпляра key класса Hashtable, в котором хранятся ответы пользователя.
            foreach (object key in keys.Keys)
            {
                bool flag = true;
                DataRow[] drvariants = (DataRow[])keys[key];//ошибка
                bool[] answers = (bool[])clientAnswer[key];
                int i = 0;
                foreach (DataRow drvariant in drvariants)
                {
                    if (((bool)drvariant["isRight"]) == answers[i++])
                    {
                        continue;
                    }
                    else
                    {
                        flag = false;
                        break;
                    }
                }
                if (flag)
                {
                    ++counter;
                }
            }
            //Делим кол-во правильных ответов на общее число ответов, результат умножаем на 100
            int result = (int)(counter / dsTests.Tables["Questions"].Rows.Count * 100);
            MessageBox.Show(String.Format("Вы ответили правильно на {0}% вопросов.", result), "Результат тестирования", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }