c# - 如何创建 Func<TSource> 到 Expression<Func<TSource,TValue>>

标签 c# asp.net asp.net-mvc linq delegates

<分区>

void ITest<TSource, TDestination>.TestMethod<TValue>(Expression<Func<TDestination, TValue>> destination, Func<TValue> value)
        {
            // i want to create Func<TValue> to Expression<Func<TSource, TValue>>
        }

我有一个方法,它将采用参数 Func。

我想将 Func 转换为 Expression>

最佳答案

你不能“转换”Func<>Expression<Func<>> . Func 基本上是编译过的 Expression,所以唯一的解决办法就是反编译它,但这并不容易。

你可以做的是包装Func<>Expression ,但我不确定它是否给你带来了什么。

例子:

public static Expression<Func<T>> Wrap<T>(Func<T> f)
{
    return Expression.Lambda<Func<T>>(
        Expression.Invoke(Expression.Constant(f))
    );
}
public static Expression<Func<T1, T2>> Wrap<T1, T2>(Func<T1, T2> f)
{
    var p1 = Expression.Parameter(typeof (T1));
    return Expression.Lambda<Func<T1, T2>>(
        Expression.Invoke(Expression.Constant(f), p1), 
        new[] { p1 }
    );
}

关于c# - 如何创建 Func<TSource> 到 Expression<Func<TSource,TValue>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28061485/

相关文章:

c# - 无法加载文件或程序集“MyAssembly.XmlSerializers

c# - 如何在标记中添加项目以供用户控制?

javascript - 将共享的 'code_block' 从 loc-A 移动到 loc-B,只有一个 'code_block' 的写入实例

c# - Web 开发框架,兼容 .net 3.5 +

c# - SQLite 和 .NET 用户控件

c# - 在 ASP.NET (MVC) 中从 CSV/Excel 导入期间标准化数据的推荐方法是什么?

c# - 我如何在 LINQ 中使用 Regex.Replace 方法

c# - Zend Framework 中的 ASP.NET MVC 模块

c# - MVC 3 : how to update checkboxlist when dropdownlistitem is selected?

c# - 翻转 View : HowTo bind a Collection<string> as ItemsSource