如何将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
相关产品推荐
相关产品推荐

