【发布时间】:2017-06-20 18:02:26
【问题描述】:
我需要创建一个非常有效且重复的动作:
- 将对象类型变量转换为 ICollection 类型变量
- 将对象类型变量转换为 T 类型变量
- 将 T 类型项添加到 ICollection 类型集合中。
据我了解,构建表达式树并存储操作以供重用是最快的方法。我有很多麻烦。为了更清楚地说明这一点,我需要一个表达式树编译操作来执行此操作:
private void AddToCollection(Type itemType, object item, object collection)
{
// assume itemType is used in the expression-tree to cast to ICollection<T>
((ICollection<T>)collection).Add((T)item);
}
【问题讨论】:
-
为什么不直接使用泛型函数呢?使用表达式能给你什么?
-
Type itemType参数是不可能的。唯一可能的是为特定的Type创建Action<object, object>,然后通过object item, object collection多次调用它。它对你有用吗? -
@Amy 我不能使用泛型方法,因为我没有类型参数。我已经使用反射从标有属性的属性派生了集合的实例。
-
@IvanStoev 是的,这可行。我可以为我需要的每种类型缓存一个新操作。
标签: c# expression-trees