c#表达式树:带有参数外的调用方法?

问题描述 投票:0回答:3

例如:我想打电话给

Int32.TryParse(String numberStr, out Int32 result)

Expression tree中,但是我不知道如何获得解析结果。

c# .net expression-trees
3个回答
1
投票

[使用表达式时,您不需要做任何特殊的事情来调用带有out参数的方法:只需将其视为任何其他参数,然后运行时就会处理它。

这里是一个类似的例子:

void Lambda(string input)
{
    int parsed;
    int.TryParse(input, out parsed);
    Console.WriteLine("Parsed: {0}", (object)parsed);
}

使用表达式:

public static void Main()
{
    var inputParam = Expression.Parameter(typeof(string), "input");
    var parsedVar = Expression.Variable(typeof(int), "parsed");

    var tryParseCall = Expression.Call(
        typeof(int),
        "TryParse",
        null,
        inputParam,
        parsedVar);

    var writeLineCall = Expression.Call(
        typeof(Console),
        "WriteLine",
        null,
        Expression.Constant("Parsed: {0}"),
        Expression.Convert(parsedVar, typeof(object)));

    var lambda = Expression.Lambda<Action<string>>(
        Expression.Block(
            new[] { parsedVar },
            tryParseCall,
            writeLineCall),
        inputParam);

    var compiled = lambda.Compile();
    compiled("3");
}

See it working on dotnetfiddle


0
投票

结果存储在变量result中(如您在out参数中所命名)。尝试解析尝试解析您的输入,如果成功,则返回true并将结果值放入指定的out参数中。否则,它返回false,并且out参数变为无效。您将像这样使用它。

if (Int32.TryParse(String numberStr, out Int32 result)) {
    // do something with `result`
}

// something went wrong (failure state - maybe with an `else`?)

0
投票

您能否使用下划线“ _”进行尝试?>

Int32.TryParse(String numberStr, out _)
    
© www.soinside.com 2019 - 2024. All rights reserved.