Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择语句。我喜欢它!这是完美的,它还可以防止随后的链式火柴开火。我喜欢它!这是完美的,它还可以防止随后的链式匹配触发。 myEnum.Match((item)=>item.MatchesCondition, (item)=>ExecuteFun_C#_Linq_Pattern Matching_Strategy Pattern - Fatal编程技术网

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);
}