接口的实现在C#匿名类? [英] Interface-implementing anonymous class in C#?

查看:615
本文介绍了接口的实现在C#匿名类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有在C#中的结构,它允许你创建一个匿名类实现一个接口,这与Java?

Is there a construct in C# which allows you to create a anonymous class implementing an interface, just like in Java?

推荐答案

正如已经说明,没有,这是不可能的。但是,您可以实现所需的接口,并在它的构造函数接受一个lambda,这样你可以把一个Lambda成实现该接口的类的类。例如:

As has already been stated, no, this is not possible. However, you can make a class that implements the desired interface and accepts a lambda in it's constructor so that you can turn a lambda into a class that implements the interface. Example:

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);
    }
}



使用(显然什么都不做有益的,但​​你得到的主意)

Usage (obviously doing nothing helpful, but you get the idea)

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

这篇关于接口的实现在C#匿名类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆