例如:我想打电话给
Int32.TryParse(String numberStr, out Int32 result)
在Expression tree
中,但是我不知道如何获得解析结果。
[使用表达式时,您不需要做任何特殊的事情来调用带有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");
}
结果存储在变量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`?)
您能否使用下划线“ _”进行尝试?>
Int32.TryParse(String numberStr, out _)