C# 如何转换表达式中的属性选择器<;Func<;MyClass,int>>;?
我有以下表达式类型:C# 如何转换表达式中的属性选择器<;Func<;MyClass,int>>;?,c#,linq,expression,C#,Linq,Expression,我有以下表达式类型: 表达式 如何将其转换为 表达式 …然后回到 Expression我想你可以用Expression.Convert: Expression<Func<MyClass, int>> original = ...; var conversion = Expression.Lambda<Func<MyClass, object>>( Expression.Convert(original.Body, typeof(o
表达式
如何将其转换为
表达式
…然后回到
Expression
我想你可以用Expression.Convert
:
Expression<Func<MyClass, int>> original = ...;
var conversion = Expression.Lambda<Func<MyClass, object>>(
Expression.Convert(original.Body, typeof(object)),
original.Parameters);
var conversionBack = Expression.Lambda<Func<MyClass, int>>(
Expression.Convert(conversion.Body, typeof(int)),
original.Parameters);
表达式原始=。。。;
var conversion=Expression.Lambda(
Expression.Convert(original.Body,typeof(object)),
原始参数);
var conversionBack=Expression.Lambda(
Expression.Convert(conversion.Body,typeof(int)),
原始参数);
编辑:好的,它看起来很有效:
using System;
using System.Linq;
using System.Linq.Expressions;
class Test
{
static void Main()
{
Expression<Func<string, int>> original = x => x.Length;
var conversion = Expression.Lambda<Func<string, object>(
Expression.Convert(original.Body, typeof(object)),
original.Parameters);
var conversionBack = Expression.Lambda<Func<string, int>>(
Expression.Convert(conversion.Body, typeof(int)),
original.Parameters);
Console.WriteLine(conversion); // x => Convert(x.Length)
Console.WriteLine(conversionBack); // x => Convert(Convert(x.Length))
Console.WriteLine(conversion.Compile()("Hello")); // 5
Console.WriteLine(conversionBack.Compile()("Hello")); // 5
}
}
使用系统;
使用System.Linq;
使用System.Linq.Expressions;
课堂测试
{
静态void Main()
{
表达式original=x=>x.长度;
var conversion=表达式.Lambda conversion(x.Length)
Console.WriteLine(conversionBack);//x=>Convert(Convert(x.Length))
Console.WriteLine(conversion.Compile()(“Hello”);//5
Console.WriteLine(conversionBack.Compile()(“Hello”);//5
}
}
这里有一个相关问题: