创建自定义谓词
Creating a Custom Predicate
我是 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.
}
}
}
我们将不胜感激。
您不能使用其他类型作为 Predicate 来调用 Find。但是如果你想要自己的委托,你可以调用 FirstOrDefault (System.Linq) 然后使用它。
private delegate bool CustomPredicate (string t);
static void Main(string[] args)
{
List<string> _ListOfPlayers = new List<string>()
{
"James Anderson",
"Broad",
"foo"
};
// Method 1. Predicate and Anonymous function.
CustomPredicate _Predicate = delegate (string someString) { return someString.Length == 3; };
string result = _ListOfPlayers.FirstOrDefault(x => _Predicate(x));
Console.WriteLine("Result : {0}", result);
Console.ReadLine();
}
委托不能相互隐式转换,即使它们具有相同的签名。
Find
需要一个 System.Predicate<T>
所以你 有 给它一个 System.Predicate<T>
.
如果您想使用自己的 CustomPredicate
,您可以编写自己的 Find
方法。
还有一些方法可以在调用 Find
时使用您的 customPredicate
变量:
_ListOfPlayers.Find(new Predicate<string>(customPredicate));
_ListOfPlayers.Find(customPredicate.Invoke);
我是 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.
}
}
}
我们将不胜感激。
您不能使用其他类型作为 Predicate 来调用 Find。但是如果你想要自己的委托,你可以调用 FirstOrDefault (System.Linq) 然后使用它。
private delegate bool CustomPredicate (string t);
static void Main(string[] args)
{
List<string> _ListOfPlayers = new List<string>()
{
"James Anderson",
"Broad",
"foo"
};
// Method 1. Predicate and Anonymous function.
CustomPredicate _Predicate = delegate (string someString) { return someString.Length == 3; };
string result = _ListOfPlayers.FirstOrDefault(x => _Predicate(x));
Console.WriteLine("Result : {0}", result);
Console.ReadLine();
}
委托不能相互隐式转换,即使它们具有相同的签名。
Find
需要一个 System.Predicate<T>
所以你 有 给它一个 System.Predicate<T>
.
如果您想使用自己的 CustomPredicate
,您可以编写自己的 Find
方法。
还有一些方法可以在调用 Find
时使用您的 customPredicate
变量:
_ListOfPlayers.Find(new Predicate<string>(customPredicate));
_ListOfPlayers.Find(customPredicate.Invoke);