C # Как построить дерево выражений для Exists () в списке <T> - PullRequest
0 голосов
/ 10 апреля 2019
List<string> strlist = new List<string> { "one","two", "three" };
string somevalue = "two";

var result = strlist.Exists(e2 => e2 == somevalue);

Как преобразовать последний оператор Exists () в дерево выражений?

1 Ответ

0 голосов
/ 10 апреля 2019

Вы можете создать дерево выражений из лямбда-выражения , а затем скомпилировать его в функцию, которую затем можно вызывать с аргументами strlist и somevalue, например:

var strlist = new List<string> { "one", "two", "three" };
var somevalue = "two";

Expression<Func<List<string>, string, bool>> expression = (list, value) => 
    list.Exists(item => item == value);

Func<List<string>, string, bool> exists = expression.Compile();

bool result = exists(strlist, somevalue);

Или вы можете сделать все это в одной строке, но это немного сложно прочитать:

var exists = ((Expression<Func<List<string>, string, bool>>)
    ((list, value) => list.Exists(item => item == value))).Compile();

Но, в конце концов, не проще ли сделать:

bool result = strlist.Contains(somevalue);
...