C# 打印表达式代码和值

C# 打印表达式代码和值,c#,expression,C#,Expression,是否可以实现将表达式代码和给定的值作为字符串打印出来 class MyClass { // Expected output // 2 + 2 = 4 // v = 3 // Field = 5 // OtherClass.GetInfo() = Hello // new OtherClass().OtherField = 22 // void MyMethod() { Console.WriteLine(

是否可以实现将表达式代码和给定的值作为字符串打印出来

class MyClass
{
    // Expected output 
    // 2 + 2 = 4
    // v = 3
    // Field = 5
    // OtherClass.GetInfo() = Hello
    // new OtherClass().OtherField = 22
    // 
    void MyMethod()
    {
        Console.WriteLine(ExpressionPrintString("2 + 2")); 
        int v = 3;
        Console.WriteLine(ExpressionPrintString("v")); 
        Console.WriteLine(ExpressionPrintString("Field")); 
        Console.WriteLine(ExpressionPrintString("OtherClass.GetInfo()")); 
        Console.WriteLine(ExpressionPrintString("new OtherClass().OtherField")); 
    }
    int Field = 5;
}

class OtherClass
{
    public static sting GetInfo() { return "Hello"; }
    public int OtherField = 22;
}
我知道这允许对Lambda表达式执行此操作,如下所示:

    // Usage: ExpressionPrintString(() => 2 + 2) // returns "2 + 2 = 4"
    static string ExpressionPrintString(Expression<Func<object>> expr, string delimiter = " = ")
    {
        return expr.ToString().Replace("() => ","") 
               + delimiter 
               + expr.Compile().DynamicInvoke();
    }

您能更精确地描述当前输出和预期输出吗?@Patrickhoffman,谢谢您的评论,我更新了问题,希望现在预期输出已经清楚。您的问题是在get_项中还是在valueASP.default_aspx中?@Patrickhoffman,是的,再次更新,所以您的问题是在这两个方面?
    protected override void OnPreRenderComplete(EventArgs e)
    {
        // In this context
        // The following call: 
        string s = ExpressionPrintString(() => Context.Items["UrlRewrite:OriginalUrl"]);
        // returned:
        // value(ASP.default_aspx).Context.Items.get_Item("UrlRewrite:OriginalUrl") = http://localhost:8011/Companies
        // The expected output would be 
        // Context.Items["UrlRewrite:OriginalUrl"] = http://localhost:8011/Companies
    }