Делегаты с похожей, но разной сигнатурой - C#

Узнай цену своей работы

Формулировка задачи:

Извиняюсь за глупые вопросы, но помогите пожалуйста, понять суть происходящего. Возможно ли сделать что-то вроде такого и как (бьюсь второй день, но либо генерики не понимаю, либо типизацию, либо все сразу) Хочу сделать универсальный делегат наподобие:
Листинг программы
  1. public delegate T Add<T> (T right, T left);
Потом несколько конкретных представителей этого делегата:
Листинг программы
  1. Add<int> addInt = (right, left) => { return right + left; };
  2. Add<string> addString = (right, left) => { return right + left; };
И наконец универсальный метод вроде
Листинг программы
  1. T addSomething<T>(T one, T two)
  2. {
  3. Type type = typeof(T);
  4. if (type.Equals(typeof(Int32))) { return addInt( one, two); }
  5. if (type.Equals(typeof(String))) { return addString (one, two); }
  6. }
Почему компилятор не позволяет мне этого сделать? Я ведь кормлю им int и strings соответственно, возвращают они тоже то, что нужно.

Решение задачи: «Делегаты с похожей, но разной сигнатурой»

textual
Листинг программы
  1.     class Matrix<T>
  2.     {
  3.         public T[,] Items { get; set; }
  4.         public int Width { get { return Items.GetLength(0); } }
  5.         public int Height { get { return Items.GetLength(1); } }
  6.     }
  7.  
  8.     static class MatrixExtender
  9.     {
  10.         public static Matrix<int> Add(this Matrix<int> matrix, Matrix<int> other)
  11.         {
  12.             var res = new Matrix<int>();
  13.             res.Items = (int[,])matrix.Items.Clone();
  14.  
  15.             for (int i = 0; i < res.Width;i++ )
  16.             for (int j = 0; j < res.Height; j++)
  17.                 res.Items[i, j] += other.Items[i, j];
  18.  
  19.             return res;
  20.         }
  21.  
  22.         public static Matrix<float> Add(this Matrix<float> matrix, Matrix<float> other)
  23.         {
  24.             var res = new Matrix<float>();
  25.             res.Items = (float[,])matrix.Items.Clone();
  26.  
  27.             for (int i = 0; i < res.Width; i++)
  28.                 for (int j = 0; j < res.Height; j++)
  29.                     res.Items[i, j] += other.Items[i, j];
  30.  
  31.             return res;
  32.         }
  33.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы