6 / 6 / 5
Регистрация: 23.12.2012
Сообщений: 112
1

Преобразование типов

28.09.2015, 16:47. Показов 1708. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет есть вопросы по преобразованию типов точнее даже не знаю относиться ли эта проблема к этому.
вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 public class PropertyGrid<T>
    {
 
        public PropertyBuilder Target;
 
        public PropertyGrid(T list)
        {
            if (list.GetType() == typeof(TCP))
            { 
                PropertyBuilder tcp = new TCPBuilder<INode>(list);
                Target = tcp;
            }
            else if (list.GetType() == typeof (RTU))
            {
                PropertyBuilder rtu = new RTUBuilder<INode>(list);
                Target = rtu;
            }
        }
 
    }
 
    public abstract class PropertyBuilder
    {
 
    }
    public class RTUBuilder<T> : PropertyBuilder where T : INode
    {
        public string IPAddress { get; set; }
        public int Port { get; set; }
        public int SpeedRate { get; set; }
 
        public RTUBuilder(T list)
        {
           
        }
    }
    public class TCPBuilder<T> : PropertyBuilder where T : INode
    {
        public string IPAddress { get; set; }
        public int Port { get; set; }
 
        public TCPBuilder(T list)
        {
        }
    }
проблема в том что я не могу преобразовать тип "Т" в тип "INode"
возможно ли как-то это обойти? или что-то подобие, при сохранение подобия на паттерн билдер

кстати ругается тут
C#
1
2
3
                PropertyBuilder tcp = new TCPBuilder<INode>(list);
 
                PropertyBuilder rtu = new RTUBuilder<INode>(list);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2015, 16:47
Ответы с готовыми решениями:

Преобразование типов
Как преобазовывать(копировать) ListBox.lines в List&lt;string&gt; Description = new List&lt;string&gt;(); и...

Преобразование типов
Подскажите как в c# с массивом int можно поработать как с массивом byte; Как в с++, например, int...

Преобразование типов....
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Преобразование типов
Я унаследовал стандартный класс Socket в своем классе ASock. Вопрос о приведение типа Socket к...

4
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.09.2015, 17:27 2
Лучший ответ Сообщение было отмечено MrPhelko как решение

Решение

C#
1
public class PropertyGrid<T> where T : INode
Хотя я бы фабрику писал для такого:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public static class BuilderFactory
{
    public static PropertyBuilder GetOne<T>(T list) where T : INode
    {
        var type = list.GetType();
        if (type == typeof (TCP))
            return new TCPBuilder<INode>(list);
        if (type == typeof(RTU))
            return new RTUBuilder<INode>(list);
        throw new ArgumentException("Не определен билдер для типа " + type.Name);
    }
}
1
6 / 6 / 5
Регистрация: 23.12.2012
Сообщений: 112
29.09.2015, 09:07  [ТС] 3
Psilon, Привет, интересно, но таким способом тоже ошибки выдает
C#
1
2
3
4
5
6
7
8
9
10
11
public class PropertyGrid<T>
    {
 
        public PropertyBuilder Target;
 
        public PropertyGrid(T list)
        {
            Target = BuilderFactory.GetOne(list);// здесь ошибка
        }
 
    }
Тип "T" не может быть использован как параметр типа "T" в универсальном типе или методе "BuilderFactory.GetOne<T>(T)". Нет преобразования-упаковки или преобразования параметра типа из "T" в "DCS.Core.INode".


Хотя если отказаться от PropertyGrid и напрямую возвращать тип, то ошибок нет, но есть беда, у меня разные тип могут быть
RTU и TCP относятся к INode, но есть еще IServer, IDevice, IGroup, ITag

Добавлено через 27 минут
Psilon, Cпасибо, сделал для всех интерфейсов наследование от другого интерфейса и через него все отрабатывает
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.09.2015, 11:25 4
MrPhelko, зачем вам этот PropertyGrid сдался, если конечно в нем реально только одно свойство? Уберите его и пользуйтесь только этим PropertyBuilder или как его там.
1
6 / 6 / 5
Регистрация: 23.12.2012
Сообщений: 112
29.09.2015, 11:26  [ТС] 5
Psilon, избавился я уже от PropertyGrid
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2015, 11:26
Помогаю со студенческими работами здесь

Преобразование типов
Есть метод, который принимает на вход переменную типа IEnumerable&lt;DataRow&gt;; у меня есть...

Преобразование типов
Есть такая заковырка. Допустим есть переменая string a=&quot;54&quot;; , так вот как ее можно преобразовать к...

Преобразование типов
нужна помощь с преобразованием типа. Из текстового поля в которое предполагается введение 13...

Преобразование типов
Код: using System; using System.Text; public class Program { public static void...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru