gpt4 book ai didi

c# - 用多态替换条件如何

转载 作者:行者123 更新时间:2023-11-30 14:06:36 24 4
gpt4 key购买 nike

我想用多态替换以下递归函数中的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com