C# 将Func委托转换为字符串

C# 将Func委托转换为字符串,c#,delegates,func,C#,Delegates,Func,有没有办法将现有Func委托转换为如下字符串: Func<int, int> func = (i) => i*2; string str = someMethod(func); // returns "Func<int, int> func = (i) => i*2" Func Func=(i)=>i*2; 字符串str=somethod(func);//返回“Func Func=(i)=>i*2” 或者至少离它很近的地方。这大致可以归结为: 作者@The

有没有办法将现有Func委托转换为如下字符串:

Func<int, int> func = (i) => i*2;
string str = someMethod(func); // returns "Func<int, int> func = (i) => i*2"
Func Func=(i)=>i*2;
字符串str=somethod(func);//返回“Func Func=(i)=>i*2”
或者至少离它很近的地方。这大致可以归结为:

作者@TheCloudlessSky

Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false);

string expBody = ((LambdaExpression)exp).Body.ToString(); 
// Gives: ((x.Id > 5) AndAlso (x.Warranty != False))

var paramName = exp.Parameters[0].Name;
var paramTypeName = exp.Parameters[0].Type.Name;

// You could easily add "OrElse" and others...
expBody = expBody.Replace(paramName + ".", paramTypeName + ".")
             .Replace("AndAlso", "&&");


Console.WriteLine(expBody);
// Output: ((Product.Id > 5) && (Product.Warranty != False))
表达式exp=(x)=>(x.Id>5&&x.保修!=false);
字符串expBody=((LambdaExpression)exp.Body.ToString();
//给出:((x.Id>5)和(x.Warranty!=假))
var paramName=exp.Parameters[0].Name;
var paramTypeName=exp.Parameters[0]。Type.Name;
//您可以轻松添加“OrElse”和其他。。。
expBody=expBody.Replace(paramName+”,paramTypeName+“)
.替换(“AndAlso”、“AND&”);
控制台写入线(expBody);
//输出:((Product.Id>5)和&(Product.Warranty!=False))

它不会像您的问题一样返回
Func=(i)=>
部分,但它确实得到了基础表达式

这非常困难,除非将
委托定义为
表达式
,否则可能无法实现。有关如何将lambda主体提取为字符串的详细信息,请参见。有什么方法吗?当然可以。但是一个完全通用的方法需要做很多工作。请参阅Reflector和dotPeek等工具,以了解必须实现的逻辑类型的示例。这是一项非常不平凡的任务。在任何情况下,为了获得一个有价值的/可回答的问题,你需要用额外的细节来显著地限制这个问题,以避免它过于宽泛。这里有一些帖子,虽然不是严格地重复这个问题,但对你所问问题的挑战提供了一些额外的见解,除了提到一些可能的替代方案,这取决于您的实际场景:,不幸的是,问题是如何将Func转换为字符串,而不是如上所述的表达式。我相信问题指定了所需的输出类型。在这种情况下,除了函数之外,还需要表达式。请参阅问题中的注释部分。我相信问题是:“将Func委托转换为字符串”。是的,有人在评论中提到,它只能用于表达,不能用于Func。最好在你的回答中也要清楚地说明这一点,同时也要提到,将Func转换为表达式不会产生预期的结果,这仅仅表明问题的标题不好。如果你读了整篇文章,他们会指定他们要找的东西。在本例中,他们希望表达式包含直接位于它前面的部分。我的答案解决了这个问题,但正如我已经指出的,它不包括前面的部分。不知道你在说什么,因为他们没有要求任何其他东西。