你能给我解释一下吗

  • 什么是谓词委托?
  • 我们应该在哪里使用谓语?
  • 使用谓词时有什么最佳实践吗?

描述性源代码将不胜感激.

推荐答案

谓词是返回truefalse的函数.谓词委托是对谓词的引用.

基本上,谓词委托是对返回truefalse的函数的引用.谓词对于筛选值列表非常有用——下面是一个例子.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list = new List<int> { 1, 2, 3 };

        Predicate<int> predicate = new Predicate<int>(greaterThanTwo);

        List<int> newList = list.FindAll(predicate);
    }

    static bool greaterThanTwo(int arg)
    {
        return arg > 2;
    }
}

现在,如果使用C#3,可以使用lambda以更简洁的方式表示谓词:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list = new List<int> { 1, 2, 3 };

        List<int> newList = list.FindAll(i => i > 2);
    }
}

.net相关问答推荐

将Visual Studio更新到v17.9.3后,IDE关闭,dotnet.exe命令报告致命错误.内部CLR错误.(0x80131506)

在数据网格中:如何在更改单元格 A 中的值后显示单元格 B 中的更改

无法实例化类的代理:System.Net.HttpWebRequest.找不到无参数构造函数

如何判断属性设置器是否公开

每当属性值发生变化时引发事件?

如何判断 IOException 是否为 Not-Enough-Disk-Space-Exception 类型?

每第 N 个字符/数字拆分一个字符串/数字?

如何从 appsettings.json 中获取价值

如何对无法加载的 VSTO 插件进行故障排除?

如何将枚举值序列化为 int?

Double.TryParse 或 Convert.ToDouble - 哪个更快更安全?

互锁且易变

监听依赖属性的变化

我应该如何删除 DbSet 中的所有元素?

判断对象列表是否包含具有特定值的属性

例外:不支持 URI 格式

在 Windows 窗体 C# 应用程序中拥有配置文件的最简单方法

使用没有catch块的try-finally块

MVVM 没有意义吗?

无法添加对 dll 的引用