c# - 创建自定义谓词
问题描述
我是 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.
}
}
}
帮助将不胜感激。
解决方案
即使具有相同的签名,委托也不能隐式转换为彼此。
Find
期望 aSystem.Predicate<T>
所以你必须给它 a System.Predicate<T>
。
Find
如果您想使用自己的CustomPredicate
.
还有一些方法可以customPredicate
在调用中使用您的变量Find
:
_ListOfPlayers.Find(new Predicate<string>(customPredicate));
_ListOfPlayers.Find(customPredicate.Invoke);
推荐阅读
- gradle - 是否可以从同一个子项目并行运行两个独立的 gradle 任务?
- javascript - 为什么 spread() 方法在 Sequelize 中不起作用?
- javascript - 在选项卡处于后台时使用 d3.js 绘制 SVG
- assembly - 我无法让 SASM 在 Linux 上运行
- python - 命令行:Python 程序说“Killed”
- java - 正则表达式从文本 java 中验证意大利语名称
- php - Laravel 控制器不显示来自 s3 存储桶的图像
- ios - 在 UIView 中显示视图控制器
- pandas - 使用带有 Spark 版本 2.2 的 row_number() 函数在 PySpark DataFrame 中创建每一行的行号
- java - @SendTo 在带有 Spring Boot 的 JMS(ActiveMQ 集成)中不起作用