@youkerni
Junior Unity3D developer

Как сравнить два лямбда выражения?

Суть вопроса: есть два идентичных события. Как сравнить их так, что бы метод AreEqual вернул True.

Action a = () => Debug.Log(true); 
Action b = () => Debug.Log(true);

var result = AreEqual(a, b);


Когда-то сравнивал через метод который в качестве шаблона принимал одну лямбду, а потом сравнивал их. Сигнатура примерно такая.

public bool AreEqual<T>(T template, object action)
{

}


Плюс нужно что бы это работало и в таком виде:
var result = AreEqual(()=> Debug.Log(true), b);
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 2
DarkRaven
@DarkRaven
разработка программного обеспечения
В теории, вы можете размотать данное выражение в какое-то строковое, по вашему правилу. Т.е., транслировать данное выражение, как транслируется LINQ в соответствующий SQL (с оговорками и сохранением информации по типам) - если грубо.
Но, я бы не рекомендовал так делать в принципе, т.к. это все издержки и профит не очевиден.
Ответ написан
@Csus4
Db4objects имеется в nuget
using System;
using System.Diagnostics;
using System.Linq.Expressions;

using Db4objects.Db4o.Linq.Expressions;

class Test
{

    static void Main()
    {
        Expression<Action> a = () => Debug.Write(1);
        Expression<Action> b = () => Debug.Write(1);
        Expression<Action> c = () => Debug.Write(2);
        Expression<Action> d = () => a.Compile();

        Func<Expression, Expression, bool> eq =
            ExpressionEqualityComparer.Instance.Equals;

        Console.WriteLine(eq(a, b));                                          //true
        Console.WriteLine(eq(a, c));                                          //false
        Console.WriteLine(eq(a, d));                                          //false 
        Console.WriteLine(eq(a, (Expression<Action>)(() => Debug.Write(1)))); //true
        Console.ReadKey();
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Кнопка Екатеринбург
До 100 000 руб.
ЛАНИТ Москва
от 80 000 до 100 000 руб.
Payment Systems Москва
от 160 000 до 200 000 руб.
21 авг. 2018, в 10:29
2000 руб./за проект
21 авг. 2018, в 09:20
5555 руб./за проект
21 авг. 2018, в 07:22
100000 руб./в месяц