C# 选择语句。我喜欢它!这是完美的,它还可以防止随后的链式火柴开火。我喜欢它!这是完美的,它还可以防止随后的链式匹配触发。 myEnum.Match((item)=>item.MatchesCondition, (item)=>ExecuteFun
C# 选择语句。我喜欢它!这是完美的,它还可以防止随后的链式火柴开火。我喜欢它!这是完美的,它还可以防止随后的链式匹配触发。 myEnum.Match((item)=>item.MatchesCondition, (item)=>ExecuteFun,c#,linq,pattern-matching,strategy-pattern,C#,Linq,Pattern Matching,Strategy Pattern,选择语句。我喜欢它!这是完美的,它还可以防止随后的链式火柴开火。我喜欢它!这是完美的,它还可以防止随后的链式匹配触发。 myEnum.Match((item)=>item.MatchesCondition, (item)=>ExecuteFunction(item)) .Match((item)=>item.MatchesSomeOtherCondition, (item)=>ExecuteSomeOtherFunction(item)); SomeList.Whe
选择语句。我喜欢它!这是完美的,它还可以防止随后的链式火柴开火。我喜欢它!这是完美的,它还可以防止随后的链式匹配触发。
myEnum.Match((item)=>item.MatchesCondition, (item)=>ExecuteFunction(item))
.Match((item)=>item.MatchesSomeOtherCondition, (item)=>ExecuteSomeOtherFunction(item));
SomeList.Where(item => item.Equals(item));
SomeList.Where(item => item.Contains(item));
public static class Extensions
{
public static IEnumerable<T> Match<T>(this IEnumerable<T> items, Func<T, bool> condition, Action<T> action)
{
foreach (T item in items)
{
if (condition(item))
{
action(item)
}
else
{
yield return item;
}
}
}
}
void Main()
{
var collection = new List<string> { "One", "Two" };
var dict = new Dictionary<Func<string, bool>, Action<string>>
{
{ ConditionOne, ActionOne },
{ ConditionTwo, ActionTwo },
};
Match(collection, dict);
}
public void Match<T>(IEnumerable<T> collection,
Dictionary<Func<T, bool>, Action<T>> matchMap)
{
var wasMatched = false;
foreach (var item in collection)
{
if (wasMatched) break;
foreach (var pair in matchMap)
{
if (wasMatched) break;
if (pair.Key(item))
{
pair.Value(item);
wasMatched = true;
}
}
}
}
public bool ConditionOne<T>(T item)
{
return false;
}
public void ActionOne<T>(T item)
{
Console.WriteLine(item);
}
public bool ConditionTwo<T>(T item)
{
return true;
}
public void ActionTwo<T>(T item)
{
Console.WriteLine(item);
}