0
所以這是問題。這與Regex類似:我有一個模式,可以知道表達式匹配。例如,我有這樣的使用表達式樹的自定義表達式的相等性
所以Hello world
的圖像匹配,但Goodbye Town
沒有。
我該怎麼辦?我可以像這樣構建一棵樹,但我不知道如何使用它來檢查輸入匹配。
我已經使用了搜索,它與此類似,求解Expression Trees in NHibernate 但根本沒有。
所以這是問題。這與Regex類似:我有一個模式,可以知道表達式匹配。例如,我有這樣的使用表達式樹的自定義表達式的相等性
所以Hello world
的圖像匹配,但Goodbye Town
沒有。
我該怎麼辦?我可以像這樣構建一棵樹,但我不知道如何使用它來檢查輸入匹配。
我已經使用了搜索,它與此類似,求解Expression Trees in NHibernate 但根本沒有。
這是一個適當的時間使用複合圖案。創建一個表達式接口,然後爲And,Or和一個值創建類。然後,您可以編寫這些類來創建你的樹:
public interface IExpression
{
bool Match(string value);
}
public class AndExpression : IExpression
{
private IEnumerable<IExpression> expressions;
public AndExpression(IEnumerable<IExpression> expressions)
{
this.expressions = expressions;
}
public bool Match(string value)
{
return expressions.All(exp => exp.Match(value));
}
}
public class OrExpression : IExpression
{
private IEnumerable<IExpression> expressions;
public OrExpression(IEnumerable<IExpression> expressions)
{
this.expressions = expressions;
}
public bool Match(string value)
{
return expressions.Any(exp => exp.Match(value));
}
}
public class ContainsExpression : IExpression
{
private string search;
public ContainsExpression(string search)
{
this.search = search;
}
public bool Match(string value)
{
return value.Contains(search);
}
}
這裏是您所提供的樹的實現:
IExpression root = new AndExpression(new IExpression[]{
new ContainsExpression("Hello"),
new OrExpression(new IExpression[]{
new ContainsExpression("World"),
new ContainsExpression("Town")})});
注意,您可以進行一些更改了API,使構建這些樹如果你有適當的動機,那麼更簡潔一點。 (即可選構造函數重載使用參數。)
爲什麼你認爲表達式樹是很適合解決這個問題呢? –
*「我可以像這樣構建樹」* - 請發佈您用來構建樹的代碼 – GolfWolf