Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Приведение типов  (Прочитано 17314 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Gor
Постоялец

ru
Offline Offline

« : 29-07-2015 08:49 » 

Доброе время суток!

Код: (C#)
Hashtable keys = new Hashtable();
…………………………………………
foreach (object key in keys.Keys)
        DataRow[] drvariants = (DataRow[])keys[key]; //ошибка!!!


Возникает ошибка:
Не удалось привести тип объекта "System.Boolean[]" к типу "System.Data.DataRow[]".

Если не затруднит, отпишите, как решить эту проблему.

Спасибо!
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 29-07-2015 11:23 » 

Какой тип у выражения keys[key] ?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #2 : 29-07-2015 12:47 » 

Дак, Hashtable
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #3 : 29-07-2015 13:37 » 

Дак, Hashtable
сорри, не большой знаток C#, но может Вы имели в виду:
Код: (C#)
foreach (object key in keys.Keys)
        DataRow[] drvariants = key;
Потому-как, если я правильно понял, Ваше keys[key] разворачивается в keys.Contains(key), которое возвращает bool.
« Последнее редактирование: 29-07-2015 13:47 от darkelf » Записан
Gor
Постоялец

ru
Offline Offline

« Ответ #4 : 29-07-2015 13:47 » 

Там же массив. Так и пишет: "Не удалось привести тип объекта "System.Data.DataRow" к типу "System.Data.DataRow[]".
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #5 : 29-07-2015 14:03 » 

Gor, скажите пожалуйста, что Вы хотите получить? заполнить массив drvariants значениями ключей из Hashtable? Тогда, наверное, код добавления в массив должен выглядеть как-то по-другому.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 29-07-2015 14:44 » 

Дак, Hashtable

"Дак" (с)  Hashtable это у keys, a keys[key] это уже элемент массива.

Поэтому и "пишет" не
Там же массив. Так и пишет: "Не удалось привести тип объекта "System.Data.DataRow" к типу "System.Data.DataRow[]".
а
Не удалось привести тип объекта "System.Boolean[]" к типу "System.Data.DataRow[]".

зы А вобще-то согласен с darkelf

Gor, скажите пожалуйста, что Вы хотите получить?

Что Вы хотели сделать этим "кодом"

Код: (C#)
Hashtable keys = new Hashtable();
…………………………………………
foreach (object key in keys.Keys)
        DataRow[] drvariants = (DataRow[])keys[key]; //ошибка!!!

после

foreach (object key in keys.Keys)

key - является элементом коллекции keys.Keys, а что же тогда keys[key]?
« Последнее редактирование: 29-07-2015 14:49 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #7 : 29-07-2015 16:20 » 

Извиняюсь, я не точно ответил. Конструкция предложенная darkelf 
Код: (C#)
DataRow[] drvariants = key;
вообще не компилируется. Я делал
Код: (C#)
DataRow[] drvariants = (DataRow[])key;
и вот тогда выдавало ошибку описанную выше. Хотя это, возможно, и не важно.
Согласно задаче, в keys[key] хранятся ответы студентов на тестовые вопросы. Для последующего отделения правильных.

Код: (C#)
 
 //Экземпляр 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);
        }
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #8 : 30-07-2015 06:00 » 

Компилятор Вам говорит, что в key у Вас хранится не массив DataRow, а единичный экземпляр DataRow. Попытайтесь выяснить, что-же Вы храните в keys.Keys и получаете в качестве key при переборе.

PS: не совсем понятно, зачем у Вас:
Код: (C#)
            //Создаем счетчик
            double counter = 0;
У Вас число правильных ответов может быть дробным?
Записан
Gor
Постоялец

ru
Offline Offline

« Ответ #9 : 30-07-2015 08:01 » new

Нет не может.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines