【发布时间】:2025-12-26 14:10:10
【问题描述】:
我想为这样的东西构建表达式:
x => DoSomething(x)
有可能吗?我该如何做到这一点?
【问题讨论】:
-
你问的是什么语言?
标签: c# lambda expression
我想为这样的东西构建表达式:
x => DoSomething(x)
有可能吗?我该如何做到这一点?
【问题讨论】:
标签: c# lambda expression
你可以这样做:
using System;
using System.Linq.Expressions;
public class Program
{
public static void Main()
{
Expression<Func<string, string>> func = (x) => DoSomething(x);
Console.WriteLine(func.ToString());
}
public static string DoSomething(string s)
{
return s; // just as sample
}
}
这是工作小提琴 - https://dotnetfiddle.net/j1YKpM 它将被解析并 Lambda 将被保存为表达式
【讨论】:
您的意思是Func<Tin,Tout> 代表吗?
基本上你需要一个Func<Tin,Tout>
Func<Tin,Tout> func = x=> DoSomething(x)
其中x 的类型为Tin 和DoSomething 返回Tout 类型
【讨论】:
也许这个问题有点不清楚。这就是我的意思:
var arg = Expression.Parameter(pluginType, "x");
var method = GetType().GetMethod("DoSomething");
var methodCall = Expression.Call(method, arg);
var lambda = Expression.Lambda(delegateType, methodCall, arg); // I was looking for this
这就是我想要的。谢谢你的时间:)
【讨论】:
Expression<Action<string>> func = (x) => DoSomething(x);,因为它会生成与您的答案几乎相同的代码。