C# 我可以在字典中存储嵌套的lambda表达式吗?
我想把字符串解析成C语言中的lambda表达式, 例如,将lt 5解析为x=>x<5,以便我可以将其用作Enumerable的参数。其中: 首先,我制作了一个operationList,它存储一个元组,其中Item1向操作符描述所有别名,Item2存储操作符的一个通用版本 然后Parse将字符串lt 5拆分为[lt,5],并根据键lt搜索操作 最后,如果我能找到这个运算,5将被部分应用于它,结果将是一个lambda表达式x=>xC# 我可以在字典中存储嵌套的lambda表达式吗?,c#,linq,functional-programming,C#,Linq,Functional Programming,我想把字符串解析成C语言中的lambda表达式, 例如,将lt 5解析为x=>xx的一部分。 private readonly static List<Tuple<List<string>, Func<double, Func<double, bool>>>> operationList = new Dictionary<string, Func<double, Func<double, bool>>
private readonly static List<Tuple<List<string>, Func<double, Func<double, bool>>>> operationList =
new Dictionary<string, Func<double, Func<double, bool>>>()
{ { "lt <", val => ( x => x < val ) }
, { "le <=", val => ( x => x <= val ) }
, { "eq = ==" , val => ( x => x == val ) }
, { "ne != <>", val => ( x => x != val ) }
, { "ge >=", val => ( x => x >= val ) }
, { "gt >", val => ( x => x > val ) } }
.Select(kv =>
new Tuple<
List<string>,
Func<double, Func<double, bool>>>(
kv.Key.Split(' ').ToList(),
kv.Value))
.ToList();
In C关键字用于表示编译时常量,但在示例中,列表是在运行时使用LINQ计算的
在C中,const值始终是静态的,将其设为只读会将字段的作用域更改为实例
注意,列表中的内容可能在执行过程中发生变化,并且只读不会阻止您删除和添加Tuples到列表中。请考虑使用它仍然不会阻止您修改它,只会使它变得更难或不使用.NET BCL < /P>的一部分。
private readonly static List<Tuple<List<string>, Func<double, Func<double, bool>>>> operationList =
new Dictionary<string, Func<double, Func<double, bool>>>()
{ { "lt <", val => ( x => x < val ) }
, { "le <=", val => ( x => x <= val ) }
, { "eq = ==" , val => ( x => x == val ) }
, { "ne != <>", val => ( x => x != val ) }
, { "ge >=", val => ( x => x >= val ) }
, { "gt >", val => ( x => x > val ) } }
.Select(kv =>
new Tuple<
List<string>,
Func<double, Func<double, bool>>>(
kv.Key.Split(' ').ToList(),
kv.Value))
.ToList();