Как создать обобщенный метод для умножения чисел? - C#

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

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

Как сделать универсальный метод, который будет перемножать переменные? Пример с типом int
Листинг программы
  1. static int Multi(int a, int b)
  2. {
  3. return a * b;
  4. }
Но числа могут быть int и double

Решение задачи: «Как создать обобщенный метод для умножения чисел?»

textual
Листинг программы
  1. class Operator<T>
  2. {
  3.     private static readonly Func<T, T, T> multiply = CreateExpression<T, T, T>(new Func<Expression, Expression, BinaryExpression>(Expression.Multiply));
  4.    
  5.     public static Func<T, T, T> Multiply
  6.     {
  7.         get { return Operator<T>.multiply; }
  8.     }
  9.    
  10.     private static Func<TArg1, TArg2, TResult> CreateExpression<TArg1, TArg2, TResult>(Func<Expression, Expression, BinaryExpression> body)
  11.     {
  12.         ParameterExpression parameterExpression1 = Expression.Parameter(typeof (TArg1), "lhs");
  13.         ParameterExpression parameterExpression2 = Expression.Parameter(typeof (TArg2), "rhs");
  14.         try
  15.         {
  16.             return Expression.Lambda<Func<TArg1, TArg2, TResult>>(
  17.                 (Expression) body((Expression) parameterExpression1,
  18.                 (Expression) parameterExpression2),
  19.                 new ParameterExpression[2] { parameterExpression1, parameterExpression2 }
  20.             ).Compile();
  21.         }
  22.         catch (Exception ex)
  23.         {
  24.             string msg = ex.Message;
  25.             return (Func<TArg1, TArg2, TResult>) delegate { throw new InvalidOperationException(msg); };
  26.         }
  27.     }    
  28. }

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


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

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

15   голосов , оценка 4.067 из 5

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

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

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