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

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

正如已经说过的那样,不,这是不可能的。 但是,您可以创建一个实现所需接口的类,并在其构造函数中接受lambda,以便您可以将lambda转换为实现该接口的类。 例:

public class LambdaComparer : IEqualityComparer { private readonly Func _lambdaComparer; private readonly Func _lambdaHash; public LambdaComparer(Func lambdaComparer) : this(lambdaComparer, EqualityComparer.Default.GetHashCode) { } public LambdaComparer(Func lambdaComparer, Func 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); } } 

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

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

不.C#不支持匿名类(除了无法定义方法的匿名类型)。

不,Lambda Expression无法实现任何额外的接口。

你也在比较错误的东西。 我猜你真的想问一下C#中的匿名类型是否可以实现接口。 对此的答案也是否定的。