相关疑难解决方法(0)

结合多个谓词

在c#.NET 2.0中有什么办法!结合多个谓词?

假设我有以下代码.

List<string> names = new List<string>();
names.Add("Jacob");
names.Add("Emma");
names.Add("Michael");
names.Add("Isabella");
names.Add("Ethan");
names.Add("Emily");

List<string> filteredNames = names.FindAll(StartsWithE);

static bool StartsWithE(string s)
{
    if (s.StartsWith("E"))
    {
        return true;
    }
    else
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这给了我:

Emma
Ethan
Emily
Run Code Online (Sandbox Code Playgroud)

所以这是非常酷的东西,但我知道希望能够使用多个谓词进行过滤.

所以我希望能够说出这样的话:

List<string> filteredNames = names.FindAll(StartsWithE OR StartsWithI);
Run Code Online (Sandbox Code Playgroud)

为了得到:

Emma
Isabella
Ethan
Emily
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?目前我只是过滤完整列表两次,然后将结果合并.但不幸的是,这是非常无效的,更重要的是我失去了原始的排序顺序,这在我的情况下是不可接受的.

我还需要能够迭代任意数量的过滤器/谓词,因为可能会有很多.

再次,它需要是一个.NET 2.0解决方案,遗憾的是我不能使用更新版本的框架

非常感谢.

c# predicate .net-2.0

33
推荐指数
3
解决办法
2万
查看次数

为什么输出是5?

我正在尝试向我的委托添加另外两个函数,但似乎它不处理我添加的函数.按照计划输出5.我希望10.为什么会这样?

using System;

namespace abc
{
public delegate int Del(int k);

class Class1
{
    public int Add2(int value)
    {
        return value = value + 2;
    }

    public int Add3(int value)
    {
        return value = value + 3;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Class1 c = new Class1();
        Del mydel = c.Add2;
        mydel += c.Add3;
        mydel += c.Add2;

        Console.WriteLine(mydel(3));
        Console.ReadLine();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

c# delegates

1
推荐指数
1
解决办法
69
查看次数

多播委托C#中的奇怪行为?

我有这个简单的事件:

public class ClassA
{
    public event Func<string, int> Ev;
    public int Do(string l)
    {
        return Ev(l);
    }
}
Run Code Online (Sandbox Code Playgroud)

和2方法:

  static int Display(string k)
        {
            return k.Length;
        }

  static int Display_2(string k)
        {
            return k.Length*10;
        }
Run Code Online (Sandbox Code Playgroud)

我正在注册这个活动:

 ClassA a = new ClassA();
 a.Ev += Display;
 a.Ev += Display_2;
Run Code Online (Sandbox Code Playgroud)

现在,我正在执行:

   Console.WriteLine(a.Do("aaa")); 
Run Code Online (Sandbox Code Playgroud)

输出 :

在此输入图像描述

什么 ???

  • 他在调用列表中有2种方法!它确实运行了它们,但为什么它只显示上次注册的结果?

  • 结果在哪里"3"消失了?(第一次调用)?(虽然两个display+都display_2被执行了......我没想到console.write会迭代结果.但也没想到他决定要显示哪个.)

编辑:

在此输入图像描述

.net c# delegates

0
推荐指数
2
解决办法
568
查看次数

标签 统计

c# ×3

delegates ×2

.net ×1

.net-2.0 ×1

predicate ×1