假设以下程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
namespace Lambda {
class Program {
public void TheFunction<T> (Expression<Func<T>> action) {
/** logic **/
}
static void Main (string[] args) {
TheFunction(); //this will of course not compile,
// because the Lambda Expression is missing.
}
}
public class foo {
public int bar { get; set; }
}
}
这里的问题是如何调用TheFunction?目标是使用 Expression>,以便在 TheFunction 中检索 Property 名称以及其他内容。
我想要这样的东西:
//...
TheFunction((foo f)=> f.bar);
//...
但是当我尝试时它会说,不能从用法中推断出类型参数,我应该尝试指定它们,但是如何指定它们?
最佳答案
问题是(foo f) => f.bar
与 Func<T>
不兼容.您的 lamba 函数接受一个 foo
类型的参数并返回 int
,因此你必须声明 TheFunction
这样:
public void TheFunction<TArg, TResult> (Expression<Func<TArg, TResult>> action) { … }
然后这段代码可以正常编译:
new Program().TheFunction((foo b) => b.bar);
旁注:Main
是一个静态方法,因此您需要实例化 Program
首先可以调用TheFunction
.
关于c# - 如何将 Expression<Func<int>> 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20069089/