Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何转换表达式中的属性选择器<;Func<;MyClass,int>>;?_C#_Linq_Expression - Fatal编程技术网

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
}
}
这里有一个相关问题: