接口 – 在C#中实现匿名类?

Interface-implementing anonymous class in C#?

本问题已经有最佳答案,请猛点这里访问。

C中有一个构造,允许你创建一个匿名类,实现一个接口,就像在Java中一样?


如前所述,不,这是不可能的。但是,您可以创建一个实现所需接口并在其构造函数中接受lambda的类,以便将lambda转换为实现接口的类。例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class LambdaComparer<T> : IEqualityComparer<T>
{
    private readonly Func<T, T, bool> _lambdaComparer;
    private readonly Func<T, int> _lambdaHash;

    public LambdaComparer(Func<T, T, bool> lambdaComparer) :
        this(lambdaComparer, EqualityComparer<T>.Default.GetHashCode)
    {
    }

    public LambdaComparer(Func<T, T, bool> lambdaComparer,
        Func<T, int> lambdaHash)
    {
        if (lambdaComparer == null)
            throw new ArgumentNullException("lambdaComparer");
        if (lambdaHash == null)
            throw new ArgumentNullException("lambdaHash");

        _lambdaComparer = lambdaComparer;
        _lambdaHash = lambdaHash;
    }

    public bool Equals(T x, T y)
    {
        return _lambdaComparer(x, y);
    }

    public int GetHashCode(T obj)
    {
        return _lambdaHash(obj);
    }
}

用法(显然没有任何帮助,但你明白了)

1
2
var list = new List<string>() {"a","c","a","F","A" };
list.Distinct(new LambdaComparer<string>((a,b) => a == b));


不。C不支持匿名类(不能定义方法的匿名类型除外)。


不,lambda表达式不能实现任何其他接口,因为它已经实现了。

你也在比较错误的事情。我猜你是想问C中的匿名类型是否可以实现接口。答案也是否定的。