我接管了一个基于Prism的C#应用程序,该应用程序包含相当多的lambda式一行程序,如下所示:

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

I would like to program in a cleaner way, by which I mean that I only want to put one single action on one single line, but I don't get it done (what's the signature of some_Method, how to use it in order to define an action, ...?)
This is what I have until now:

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

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

有人知道怎么写这个吗?

我不认为用多行格式编写这样的一行程序有任何技术优势,但它将极大地帮助我理解如何阅读、理解并支持这一源代码.

推荐答案

我不确定我是否理解正确,但您可以定义一个单独的方法或直接使用lambda表达式

因此,例如,如果您想要单独的方法:

public void HandleConfirmation(Confirmation confirmation)
{
    if (confirmation.Confirmed)
    {
        DoSomething();
    }
}

然后,您可以使用此方法作为要引发的操作:

OwnObjectRequest.Raise(confirmation, HandleConfirmation);

或使用lambda表达式

OwnObjectRequest.Raise(confirmation, c =>
{
    Confirmation conf = (Confirmation)c;
    if (conf.Confirmed)
    {
        DoSomething();
    }
});

Csharp相关问答推荐

无法更改或使用C#(WinForms.NET)中的全局变量

在ASP.NET中为数据注释 Select 合适的语言

System.Data.SQLite:判断SQLite数据库是否为空(任何表中至少有一行)

注册通用工厂的C# Dep注入

Elasticsearch:当我try 使用c#将嵌套对象添加到filter中时出现问题

如何模拟耐久任务客户端在统一测试和获取错误在调度NewsListationInstanceAsync模拟设置

如何在Parall.ForEachAsync中使用CancerationTokenSource

从c#列表中删除额外的对象&对象&>从ASP.NET WebForm返回json响应

如何使用C#获取FireStore中的列表输出文档

单行上的ReSharper数据标注

集合表达式没有目标类型

C#中Java算法的类似功能

HelperText属性不支持复杂内容(混合C#和标记)

GODOT 4向C#中的字符串参数发送信号以等待

源代码生成器项目使用`dotnet build`编译,而不是在Visual Studio中编译?

根据优先级整理合同列表

.NET EF Core Automapper项目到筛选不起作用

为什么我的UserControl没有加载到我的主窗口中?

无法对包含字符串的列进行排序.请与实体框架联接

初始化具有EntityFrameworkCore和不同架构的数据库时引发System.MissingMethodExcept