이 질문에는 이미 답변이 있습니다.
C #에서 Java에서와 같이 인터페이스를 구현하는 익명 클래스를 만들 수있는 구문이 있습니까?
이미 언급했듯이, 불가능합니다. 그러나 원하는 인터페이스를 구현하는 클래스를 만들 수 있으며 생성자에서 람다를 받아 들여 람다를 인터페이스를 구현하는 클래스로 바꿀 수 있습니다. 예:
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 Expression은 이미 수행 한 것보다 추가 인터페이스를 구현할 수 없습니다.
당신은 또한 잘못된 것들을 비교하고 있습니다. C #의 익명 형식이 인터페이스를 구현할 수 있는지 여부를 묻는 것입니다. 그것에 대한 대답도 아니오입니다.