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

如何将C#中多个仅设置和文本框不同的浏览方法重构为单一实现?

当然可以!用Lambda封装差异逻辑就能搞定

你的这些方法核心逻辑完全一致,差异只在读取/写入的Settings属性和绑定的TextBox控件上。我们可以把不变的核心逻辑抽成通用方法,用Lambda表达式把差异部分传递进去,代码会简洁很多。

第一步:编写通用的文件浏览方法

private void BrowseFile(Func<string> getCurrentSetting, Action<string> updateSetting, TextBox targetTextBox)
{
    var fileDialog = new OpenFileDialog();

    try
    {
        string currentPath = getCurrentSetting();
        if (!string.IsNullOrEmpty(currentPath))
        {
            fileDialog.InitialDirectory = Path.GetDirectoryName(currentPath);
        }
    }
    catch (ArgumentException) { }

    if (fileDialog.ShowDialog() == DialogResult.OK)
    {
        updateSetting(fileDialog.FileName);
        Settings.Default.Save();
        targetTextBox.Text = fileDialog.FileName;
    }
}

第二步:简化原有按钮事件

原来的buttonBrowseSrcXML_Click可以改成一行调用:

private void buttonBrowseSrcXML_Click(object sender, EventArgs e)
{
    BrowseFile(
        () => Settings.Default.XML_Original_File,
        path => Settings.Default.XML_Original_File = path,
        textBoxSrcXML
    );
}

其他类似按钮的调用示例

如果有另一个浏览目标XML的按钮,直接复用通用方法就行:

private void buttonBrowseDestXML_Click(object sender, EventArgs e)
{
    BrowseFile(
        () => Settings.Default.XML_Processed_File,
        path => Settings.Default.XML_Processed_File = path,
        textBoxDestXML
    );
}

这种方式不用额外定义泛型类或者复杂结构,用Lambda直接把差异逻辑(读取设置、更新设置)传递给通用方法,既保留了代码的可读性,又彻底消除了重复代码。

内容的提问来源于stack exchange,提问作者Henrik Rune Jakobsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:40:23