Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1

Интерфейсы - ошибка: неявное преобразование

08.02.2013, 08:27. Показов 2065. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые.

Прошу мне разъяснить нижеуказанную ситуацию, желательно на пальцах.

Есть интерфейс, который описывает класс хранения данных с таблиц с 2мя полями (ID и Name):
C#
1
2
3
4
5
    public interface ISimpleEntity
    {
        int ID { get; set; }
        string Name { get; set; }
    }
Есть класс для получения данных из базы в вышеуказанные классы, и методы:
Номер 1:
C#
1
2
3
4
5
6
7
8
9
10
        public ISimpleEntity GetRecordByID(int key)
        {
            using (var db = new DbManager())
            {
                return db.SetCommand(@"SELECT ch.Key, ch.Name 
                        FROM Table ch 
                        WHERE ch.Key= @key", db.Parameter("@key", key)).ExecuteObject<Channel>();
 
            }
        }
Номер 2:
C#
1
2
3
4
5
6
7
8
        public List<ISimpleEntity> GetAllRecords()
        {
            using (var db = new DbManager())
            {
                return db.SetCommand(@"SELECT ch.Key, ch.Name 
                        FROM Table ch").ExecuteList<Channel>();
            }
        }
Первые метод выполняется, и выполняется правильно, а второй ругается на неявное преобразование. Вопрос - почему? И почему успешно выполняется код:

C#
1
2
3
4
5
6
7
8
        public List<Object> GetAllRecords()
        {
            using (var db = new DbManager())
            {
                return db.SetCommand(@"SELECT ch.Key, ch.Name 
                        FROM Table ch").ExecuteList<Channel>();
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2013, 08:27
Ответы с готовыми решениями:

Быстрое преобразование Фурье и ошибка "Неявное преобразование типа"
А подскажите еще по одной прблемке: Есть программа реализующая БПФ (ну должна по крайней мере это делать) using System; using...

Ошибка "Неявное преобразование int в bool не возможно"
Помогите нужно проверить равняется ли переменная нулю делаю так while(true) { ...

Загадывание числа и ошибка "Неявное преобразование типа int в bool"
class Program { static void Main(string args) { begin: Console.WriteLine(&quot;Введите...

5
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
08.02.2013, 09:29
Так, насколько я понял вы используете BLToolkit.
А еще ваш класс Channel реализует ваш интерфейс ISimpleEntity. Так?

Почему вы опустили эти две очень важные детали?
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
08.02.2013, 09:33  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Так, насколько я понял вы используете BLToolkit.
А еще ваш класс Channel реализует ваш интерфейс ISimpleEntity. Так?

Почему вы опустили эти две очень важные детали?
Именно BLToolkit. Класс реализует ISimpleEntity. Прошу прощения что упустил.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
08.02.2013, 09:43
Вы уверены, что варинат с List<Object> работает?

Ваша проблема в том, что List<> - не инвариантен. То есть List<Channel> нельзя присвоить переменной типа Lis<ISimpleEntity>, даже если Channel можно присвоить переменной типа ISimpleEntity.
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
08.02.2013, 09:48  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Вы уверены, что варинат с List<Object> работает?

Ваша проблема в том, что List<> - не инвариантен. То есть List<Channel> нельзя присвоить переменной типа Lis<ISimpleEntity>, даже если Channel можно присвоить переменной типа ISimpleEntity.
Был уверен, но теперь нет. Не работает. Можно по подробнее про инвариантность? Может существуют какие-то другие способы?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
08.02.2013, 12:35
Для CLR фактически List<Channel> и List<ISimpleEntity> - разные типы. Если бы они были одинаковыми, то была бы возможно такая ситуация:
- вы создали List<Channel>
- скастили его к List<ISimpleEntity>
- добавили в List<ISimpleEntity> объект другого типа - не Channel, но который тоже реализует ISimpleEntity.
- тогда получается, что в List<Channel> может храниться что-то кроме Channel, ведь список то тот же самый - что неправильно

Почитайте, например, здесь - http://msdn.microsoft.com/ru-r... 07183.aspx

В качестве решения вашей проблемы, я бы посоветовал использовать IEnumerable, вместо List-a. Однако не знаю, насчет BLToolkit-а, может ли он возвращать не список. В свое время пользовался PetaPoco, он умеет возвращать IEnumerable<T>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.02.2013, 12:35
Помогаю со студенческими работами здесь

Получение элемента из ComboBox и ошибка "Неявное преобразование типа int в bool"
Пытаюсь повесить на каждый итем определенный параметр, что-бы при дальнейших расчетах с формулой из комбо бокса бралось ранее заданное...

Неявное преобразование
Привет! Возникла небольшая проблема, может даже не много детская с неявным преобразованием, но решить ее не получается: есть такой...

Неявное преобразование
Расскажите как в компьютере происходит неявное преобразование кто делает это преобразование для чего оно нужно и как...

Ошибка с округлением. Неявное преобразование типа "double" в "float" невозможно
Добрый день! Подскажите, пожалуйста. Выдает ошибку в строке: S=Math.Round(S); &quot;Ошибка 1 Неявное преобразование типа...

Ошибка Неявное преобразование типа "void" в "bool" невозможно (CS0029)
На 26 строке выдает ошибку Задание: Создать файл T1.txt в него вписать отрицательные и положительные числа. Составить программу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru