una - Interfaz de implementación de clase anónima en C#?
no se puede crear una instancia de la clase o interfaz abstracta c# (3)
Como ya se ha dicho, no, esto no es posible. Sin embargo, puede crear una clase que implemente la interfaz deseada y acepte un lambda en su constructor para que pueda convertir un lambda en una clase que implemente la interfaz. Ejemplo:
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);
}
}
Uso (obviamente no hacer nada útil, pero tienes la idea)
var list = new List<string>() { "a", "c", "a", "F", "A" };
list.Distinct(new LambdaComparer<string>((a,b) => a == b));
Esta pregunta ya tiene una respuesta aquí:
¿Existe una construcción en C # que le permita crear una clase anónima implementando una interfaz, al igual que en Java?
No, una expresión Lambda no puede implementar ninguna interfaz adicional de lo que ya lo hace.
También estás comparando las cosas equivocadas. Supongo que realmente quería preguntar si los tipos anónimos en C # pueden implementar interfaces. La respuesta a eso también es no.
No. C # no admite clases anónimas (excepto los tipos anónimos que no pueden definir métodos).