gpt4 book ai didi

C# - 遍历谓词的模式

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

我做了一个我不太喜欢的图案。

如下:

List<Element> listOfPossibleResults = getAllPossibleResults();

Element result = findResult(getFirstPriorityElements(listOfPossibleResults));
if (result!= null)
{
return result;
}

result = findResult(getSecondPriorityElements(listOfPossibleResults));
if (result!= null)
{
return result;
}

private Element findResult(List<Element> elements) {...};
private List<Element> getFirstPriorityElements(List<Element> elements) {...};
private List<Element> getSecondPriorityElements(List<Element> elements) {...};

等..

基本上我是根据几条规则创建子列表。创建子列表后,我尝试在其中找到特定元素。如果我没有找到,我会转到下一个优先级,依此类推。

我想要一个可以迭代这些标准的解决方案,直到找到解决方案。但我不知道如何将它们转换为我可以迭代的格式。

你们能给我一个特定于 C# 的问题解决方案吗?

最佳答案

正如@Lepijohnny 提到的,您可以使用责任链 设计模式。例如:

abstract class Handler<TRequest, TResult>
{
protected Handler<TRequest, TResult> successor;

public void SetSuccessor(Handler<TRequest, TResult> successor)
{
this.successor = successor;
}

public abstract TResult HandleRequest(TRequest request);
}

class FirstHandler : Handler<List<Element>, Element>
{
public override void HandleRequest(TRequest request)
{
Element result = findResult(getFirstPriorityElements(request));
if (result == null)
{
result = sucessor?.HandleRequest(request);
}
return result;
}

private Element findResult(List<Element> elements) {...};
private List<Element> getFirstPriorityElements(List<Element> elements) {...};
}

class SecondHandler : Handler<List<Element>, Element>
{
public override void HandleRequest(TRequest request)
{
Element result = findResult(getSecondPriorityElements(request));
if (result == null)
{
result = sucessor?.HandleRequest(request);
}
return result;
}

private Element findResult(List<Element> elements) {...};
private List<Element> getSecondPriorityElements(List<Element> elements) {...};
}

用法:

void Example()
{
// Setup Chain of Responsibility
var h1 = new FirstHandler();
var h2 = new SecondHandler();
h1.SetSuccessor(h2);

var result = h1.Handle(new List<Element>());
}

这只是一个简单的例子。我认为它描述了这种模式的工作原理,您可以根据自己的需要对其进行调整。

关于C# - 遍历谓词的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41299831/

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