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
}