You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将StartsWith()作为参数传入Expression.Call()方法?

C#表达式树调用StartsWith()方法的正确姿势

StartsWith是string的实例方法,构建表达式树时要明确三个核心:调用方法的字符串实例、StartsWith的方法信息、方法所需的参数。

基础用法示例

比如要实现"Hello World".StartsWith("Hello")的表达式树,代码如下:

// 1. 定义调用方法的字符串常量
var targetExpr = Expression.Constant("Hello World");
// 2. 定义前缀参数常量
var prefixExpr = Expression.Constant("Hello");

// 3. 获取string.StartsWith(string)这个重载的方法信息
var startsWithMethod = typeof(string).GetMethod(
    nameof(string.StartsWith),
    new[] { typeof(string) }
);

// 4. 构造方法调用表达式
var startsWithCallExpr = Expression.Call(
    targetExpr,       // 调用方法的字符串实例
    startsWithMethod, // 要调用的StartsWith方法
    prefixExpr        // 方法的前缀参数
);

带比较规则的重载用法

如果需要忽略大小写这类需求,就用带StringComparison的重载:

var targetExpr = Expression.Constant("Hello World");
var prefixExpr = Expression.Constant("hello");

// 获取带StringComparison参数的重载
var startsWithMethod = typeof(string).GetMethod(
    nameof(string.StartsWith),
    new[] { typeof(string), typeof(StringComparison) }
);

// 定义比较规则常量
var comparisonExpr = Expression.Constant(StringComparison.OrdinalIgnoreCase);

// 构造调用表达式,传入两个参数
var startsWithCallExpr = Expression.Call(
    targetExpr,
    startsWithMethod,
    prefixExpr,
    comparisonExpr
);

关键点说明

  • 不能直接传StartsWith这个方法名,必须通过typeof(string).GetMethod()获取正确的方法信息,因为表达式树需要明确知道调用的是哪个重载。
  • 如果你的目标字符串不是常量,而是某个参数表达式(比如从外部传入的变量),把targetExpr换成Expression.Parameter(typeof(string), "input")即可。

内容的提问来源于stack exchange,提问作者charthraxis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:32:09