作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用多态替换以下递归函数中的 if 语句。
我读了很多关于它的资料,看了几个 youtube 视频,但仍然看不到在我的代码上实际执行它的方法(为了这篇文章的目的而进行了简化)
使这个任务对我来说更加困难的是在函数和递归调用的开头存在 foreach 语句
感谢帮助
public void FlattenXml(XElement xml, string id = null)
{
var elements = xml.Elements().ToList();
foreach (var element in elements)
{
if (element.Name == "name1")
{
Func1();
}
if (element.Name == "name2")
{
Func2();
}
if (element.Name == "name3")
{
DoSomethingElse();
FlattenXml(content, tempId);
Func3();
}
else
{
DoSomethingCompletelyDifferent();
FlattenXml(element, id);
}
}
xml.Elements("name3").Remove();
}
最佳答案
如果你想使用具有代码之美的设计模式,那么我建议你使用多态性、策略模式和模式搜索。
它将提供代码增强和可重用性的优势。
下面的代码示例:
public interface ISomeOperation
{
string DoOperation(string data);
}
public class OperationA : ISomeOperation
{
public string DoOperation(string data)
{
//implemention.
return data;
}
}
public class OperationB : ISomeOperation
{
public string DoOperation(string data)
{
//implemention.
return data;
}
}
public class OperationC : ISomeOperation
{
public string DoOperation(string data)
{
//implemention.
return data;
}
}
public class OperationD : ISomeOperation
{
public string DoOperation(string data)
{
//implemention.
return data;
}
}
public class OperationContext
{
private readonly Dictionary<string, ISomeOperation> _operationStrategy = new Dictionary<string, ISomeOperation>();
public OperationContext()
{
_operationStrategy.Add("name1", new OperationA());
_operationStrategy.Add("name2", new OperationB());
_operationStrategy.Add("name3", new OperationC());
_operationStrategy.Add("name4", new OperationD());
}
public string GetOperationData(string searchType, string data)
{
return _operationStrategy[searchType].DoOperation(data);
}
}
//驱动代码:
class Program
{
static void Main(string[] args)
{
var operationContext = new OperationContext();
var elements = xml.Elements().ToList();
foreach (var element in elements)
{
operationContext.GetOperationData(element.Name, element);
}
}
}
节点:应该在一个方法中调用多个方法。
关于c# - 用多态替换条件如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46831861/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!