この質問にはすでに答えがあります。
Javaと同じように、インターフェイスを実装する匿名クラスを作成できるC#の構文がありますか。
すでに述べたように、いいえ、これは不可能です。ただし、希望するインターフェースを実装し、そのコンストラクター内でラムダを受け入れるクラスを作成して、ラムダをインターフェースを実装するクラスに変えることができます。例:
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);
}
}
使い方(明らかに何も役に立たないが、あなたはアイデアを得る)
var list = new List<string>() { "a", "c", "a", "F", "A" };
list.Distinct(new LambdaComparer<string>((a,b) => a == b));
C#は匿名クラスをサポートしていません(メソッドを定義できない匿名型を除く)。
いいえ、Lambda式では、既に実装されている以上に追加のインターフェースを実装することはできません。
あなたはまた間違ったことを比較しています。私はあなたが本当にC#の匿名型がインターフェースを実装できるかどうか尋ねるつもりだったと思います。その答えもノーです。