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

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

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

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

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

textual
Листинг программы
    class Matrix<T>
    {
        public T[,] Items { get; set; }
        public int Width { get { return Items.GetLength(0); } }
        public int Height { get { return Items.GetLength(1); } }
    }
 
    static class MatrixExtender
    {
        public static Matrix<int> Add(this Matrix<int> matrix, Matrix<int> other)
        {
            var res = new Matrix<int>();
            res.Items = (int[,])matrix.Items.Clone();
 
            for (int i = 0; i < res.Width;i++ )
            for (int j = 0; j < res.Height; j++)
                res.Items[i, j] += other.Items[i, j];
 
            return res;
        }
 
        public static Matrix<float> Add(this Matrix<float> matrix, Matrix<float> other)
        {
            var res = new Matrix<float>();
            res.Items = (float[,])matrix.Items.Clone();
 
            for (int i = 0; i < res.Width; i++)
                for (int j = 0; j < res.Height; j++)
                    res.Items[i, j] += other.Items[i, j];
 
            return res;
        }
    }

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


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

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

6   голосов , оценка 4 из 5
Похожие ответы