首页 > 解决方案 > 创建自定义谓词

问题描述

我是 Lambda 和代表的新手。我认为我的问题可能不是一个好问题,但我正在尝试编写一个简单的自定义谓词,它的作用就像内置谓词一样。

所以我要分享我的代码:请与我分享我将在哪里犯错:

内置谓词代码示例:

namespace Built_In_Predicate
{
    class Program
    {
        static void Main(string[] args)
        {

            List<string> _ListOfPlayers = new List<string>()
            {
                "James Anderson",
                "Broad",
                "foo"
            };

            // Method 1. Predicate and Anonymous function.

            Predicate<string> _Predicate = delegate (string someString) { return someString.Length == 3; };

            string result = _ListOfPlayers.Find(_Predicate);

            Console.WriteLine("Result : {0}", result);
        }
    }
}

尝试创建自定义谓词(代码):

namespace CustomPredicate
{
    class Program
    {
        // Delegate (Takes some string as a Input and return a Boolean.)
        public delegate bool CustomPredicate(string someString);

        static void Main(string[] args)
        {

            List<string> _ListOfPlayers = new List<string>()
            {
                "James Anderson",
                "Broad",
                "foo"
            };

            //  Instance of CustomPredicate.
            CustomPredicate customPredicate = delegate (string someString) { return someString.Length == 3; };

            string result = _ListOfPlayers.Find(customPredicate); // its error.
        }
    }
}

帮助将不胜感激。

标签: c#lambdadelegatesanonymous-functionpredicate

解决方案


即使具有相同的签名,委托也不能隐式转换为彼此。

Find期望 aSystem.Predicate<T>所以你必须给它 a System.Predicate<T>

Find如果您想使用自己的CustomPredicate.

还有一些方法可以customPredicate在调用中使用您的变量Find

_ListOfPlayers.Find(new Predicate<string>(customPredicate));
_ListOfPlayers.Find(customPredicate.Invoke);

推荐阅读