c# 表达式树:调用带有输出参数的方法?
c# Expression tree: call method with out-parameter?
例如:我想调用
Int32.TryParse(String numberStr, out Int32 result)
在Expression tree
中,但不知道如何得到解析的结果。
结果存储在变量 result
中(正如您在 out 参数中命名的那样)。 Try parse 尝试解析您的输入,如果成功,它 returns true
并将结果值放入命名的 out 参数中。否则,它 returns false
并且输出参数无效。你会像这样使用它。
if (Int32.TryParse(String numberStr, out Int32 result)) {
// do something with `result`
}
// something went wrong (failure state - maybe with an `else`?)
你能用下划线“_”试试吗
List<string> lstNumbs = new List<string>() {"f", "d", "7", "4", "5", "4", "2"};
var result = lstNumbs.Where(c => Int32.TryParse(c, out int _)).Select(s => s);
foreach (var item in result)
{
Console.WriteLine(item);
}
在使用表达式时调用采用 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); // <-- Here we pass 'parsedVar' as the 'out' parameter
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");
}
例如:我想调用
Int32.TryParse(String numberStr, out Int32 result)
在Expression tree
中,但不知道如何得到解析的结果。
结果存储在变量 result
中(正如您在 out 参数中命名的那样)。 Try parse 尝试解析您的输入,如果成功,它 returns true
并将结果值放入命名的 out 参数中。否则,它 returns false
并且输出参数无效。你会像这样使用它。
if (Int32.TryParse(String numberStr, out Int32 result)) {
// do something with `result`
}
// something went wrong (failure state - maybe with an `else`?)
你能用下划线“_”试试吗
List<string> lstNumbs = new List<string>() {"f", "d", "7", "4", "5", "4", "2"};
var result = lstNumbs.Where(c => Int32.TryParse(c, out int _)).Select(s => s);
foreach (var item in result)
{
Console.WriteLine(item);
}
在使用表达式时调用采用 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); // <-- Here we pass 'parsedVar' as the 'out' parameter
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");
}