-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
1

Как суммировать переменные Т в обобщенном классе?

07.04.2016, 17:51. Показов 2825. Ответов 9
Метки нет (Все метки)

Компилятор пишет что невозможно применить оператор + к переменным типа Т.

Вот код,в котором должны суммироваться переменные а и б типа Т(в методе Plus).
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
using System;
 
class A<T>
{ 
   public  T a;
  public   T b;
 
     public A(T aa,T bb)
    {
 
        a = aa;
        b = bb;
 
    }
 
  public  T Plus()
    {
 
        T res;
 
        res = a + b; //компилятор пишет невозможно применить оператор +
 
        return res;
 
    }
 
 
}
  class Demo
{
    static void Main()
    {
 
        A<int> ob = new A<int>(5, 10);
 
 
      ob.Plus();
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2016, 17:51
Ответы с готовыми решениями:

Перегрузка операторов в обобщенном классе
Всем привет. Вопрос такой: &quot;Можно ли в обобщённом классе как-нибудь перегрузить операторы *, -,...

Перегрузка операторов в обобщенном классе. Сложение, вычитание типов T
Потихоньку изучаю C#. Тут решил написать обобщенный класс, который тип T представляет из себя любой...

Перебрать переменные в классе
Добрый день. Помогите пожалуйста, прочитать все переменные записанные в List using System;...

Как реализовать пузырьковую сортировку в обобщенном двусвязном списке?
Как реализовать пузырьковую сортировку в обобщенном двусвязном списке? Сначала думал все просто,...

9
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
07.04.2016, 17:53  [ТС] 2
picture of problem
Миниатюры
Как суммировать переменные Т в обобщенном классе?  
0
746 / 487 / 187
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
07.04.2016, 17:55 3
TVPNERO, и правильно пишет. Никто не может гарантировать, что для типа T существует операция сложения.
Я предполагаю какого поведения вы хотите добиться. К сожалению, язык не предоставляет какого-либо общего типа для числовых данных. Просто через дженерики сделать не выйдет.

PS. Для оформления кода используйте теги CSharp
1
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
07.04.2016, 17:58  [ТС] 4
можете написать код к примеру как можно все же суммировать переменные типа Т в обобщенном класе?
0
746 / 487 / 187
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
07.04.2016, 18:03 5
Лучший ответ Сообщение было отмечено TVPNERO как решение

Решение

TVPNERO, если у вас версия фреймворка >=4, то можно повыделываться через dynamic

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
class A<T>
{
    public T a;
    public T b;
 
    public A(T _a, T _b)
    {
        a = _a;
        b = _b;
    }
 
    public T Plus()
    {
        dynamic ta = a;
        dynamic tb = b;
        return ta + tb;
    }
}
//---------------------------
static void Main(string[] args)
{
    A<int> testInt = new A<int>(3,5);
    int resInt = testInt.Plus();
 
    A<int> testDouble = new A<int>(3.6, 5.8);
    double resDouble = testDouble.Plus();
 
    A<Random> testOther = new A<Random>(new Random(), new Random());
    var resOther = testOther.Plus(); //Вот тут будет сгенерировано исключение RuntimeBinderException
}
1
Заблокирован
07.04.2016, 18:14 6
C#
1
2
3
4
5
public T Plus()
{
    BinaryExpression be = Expression.Add(Expression.Constant(a), Expression.Constant(b));
    return Expression.Lambda<Func<T>>(be).Compile()();
}
1
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
07.04.2016, 18:41  [ТС] 7
Спасибо,сработало.

Только я не знаю что такое dynamic.

Я только начал изучать си шарп.Изучаю по книге - Герберт Шилдт "полное руководство.С# 4.0"

Что такое dynamic ?
0
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
07.04.2016, 18:47  [ТС] 8
Спасибо.

Попробовал,но выдает вот это.
Миниатюры
Как суммировать переменные Т в обобщенном классе?  
0
Заблокирован
07.04.2016, 19:27 9
Цитата Сообщение от TVPNERO Посмотреть сообщение
Попробовал,но выдает вот это.
Ох... Ну там же даже студия подсказывает тебе, что надо
using System.Linq.Expressions;
0
-26 / 8 / 12
Регистрация: 29.03.2016
Сообщений: 1,154
07.04.2016, 21:21  [ТС] 10
спасибо.
я еще не читал раздел о Linq
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2016, 21:21
Помогаю со студенческими работами здесь

Как в обобщенном методе указать ограничения для конструктора?
Вот например я хочу создать Класс в котором я буду в основном работать с двумя типами, один из...

Глобальные переменные. Присвоение в другом классе
Есть класс/форма. В нем заданы несколько глобальных переменных. В другом классе/форме создается...

Как использовать объект класса, созданого в определеном классе, в другом классе
У меня такой вопрос,как использовать объект класса,созданого в определеном классе,в другом классе.У...

Как использовать информацию парсированую в 1 классе в другом классе
имеются 2 класса , объясните плз в чём ошибка using System; using System.Collections.Generic;...


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

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

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