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

如何将Prism框架下C#的Lambda单行代码拆分为独立代码段?

问题:拆分Prism中Lambda风格的InteractionRequest回调代码

我接手了一个基于Prism的C#应用,其中包含不少Lambda风格的回调代码,示例如下:

using Prism.Interactivity.InteractionRequest;
...
public InteractionRequest<Confirmation> OwnObjectRequest { get; } = new InteractionRequest<Confirmation>();
...
OwnObjectRequest.Raise(confirmation, c => // Lambda回调
{
    Confirmation conf = (Confirmation)c;
    if (conf.Confirmed)
    {
        DoSomething();
    }
});

我希望采用更清晰的编码方式,将Lambda中的逻辑拆成单独的方法,但不知道方法的签名是什么、如何用它定义Action等。目前我的尝试如下:

public ... some_Method(...)
{
    Confirmation conf = (Confirmation)c;
    if (conf.Confirmed)
    {
        DoSomething();
    }
}

Action actionToPerform = new Action(some_Method);
OwnObjectRequest.Raise(confirmation, actionToPerform);

请问正确的写法是什么?我认为拆分虽无技术优势,但能帮助我理解和维护这类代码。


解答

1. 明确回调方法的正确签名

InteractionRequest<Confirmation>.Raise方法的第二个参数是**Action<Confirmation>类型**的委托,这意味着目标方法需要满足:

  • 返回值为void
  • 接收一个Confirmation类型的参数

所以方法的完整签名应该是:

private void HandleOwnObjectConfirmation(Confirmation c)

2. 优化方法内的逻辑

原Lambda里的(Confirmation)c强制转换是多余的,因为参数本身就是Confirmation类型,直接使用即可。

3. 完整的拆分后代码

using Prism.Interactivity.InteractionRequest;
...
public InteractionRequest<Confirmation> OwnObjectRequest { get; } = new InteractionRequest<Confirmation>();
...

// 单独的回调处理方法
private void HandleOwnObjectConfirmation(Confirmation c)
{
    if (c.Confirmed)
    {
        DoSomething();
    }
}

// 调用Raise时直接传入方法名(C#会自动隐式转换为Action<Confirmation>)
OwnObjectRequest.Raise(confirmation, HandleOwnObjectConfirmation);

// 或者显式创建Action委托(可选,和上面效果一致)
// Action<Confirmation> confirmationAction = HandleOwnObjectConfirmation;
// OwnObjectRequest.Raise(confirmation, confirmationAction);

说明

  • 不需要显式写new Action<Confirmation>(HandleOwnObjectConfirmation),C#支持方法组隐式转换为匹配的委托类型,直接传方法名更简洁。
  • 拆分后的代码逻辑和原Lambda完全等价,只是把回调逻辑抽离到了单独方法中,更利于阅读和维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:27:41