Predicate y Func

02/09/2009 - 19:07 por Isabel | Informe spam
Hola,

que diferencia hay entre las dos definiciones:

Func<int, bool> res = x => x == 2;
Predicate<int> res1 = y => y == 2;

Si ambos apuntan a un método que acepta un entero y devuelve un boolean,
porque el método Find de List solo acepta como parámetro el Predicate?

Lista.Find(res); //no compila
Lista.Find(res1); //OK

Grácias.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
02/09/2009 - 19:16 | Informe spam
"Isabel" wrote in message
news:OKw0C$%
que diferencia hay entre las dos definiciones:

Func<int, bool> res = x => x == 2;
Predicate<int> res1 = y => y == 2;

Si ambos apuntan a un método que acepta un entero y devuelve un boolean,
porque el método Find de List solo acepta como parámetro el Predicate?

Lista.Find(res); //no compila
Lista.Find(res1); //OK




En C# no hay conversión implícita automática de un tipo a otro, aunque
los tipos sean iguales. Por ejemplo, si tienes

delegate bool Del1(int x);
delegate bool Del2(int x);

entonces no puedes usar Del1 en donde se espera un argumento del tipo
Del2, ni al contrario, a pesar de que Del1 y Del2 tienen definiciones
idénticas. Lo mismo ocurre con tu ejemplo de Func y Predicate.

Lo mismo pasa si tienes dos clases Clase1 y Clase2 con una definición
idéntica. No puedes meter un Clase2 donde se espera un Clase1 aunque por
dentro las dos clases sean exactamente iguales.
Respuesta Responder a este mensaje
#2 Isabel
02/09/2009 - 19:32 | Informe spam
Entendido Alberto,
Grácias.

"Alberto Poblacion"
escribió en el mensaje news:%23gPiaE$
"Isabel" wrote in message
news:OKw0C$%
que diferencia hay entre las dos definiciones:

Func<int, bool> res = x => x == 2;
Predicate<int> res1 = y => y == 2;

Si ambos apuntan a un método que acepta un entero y devuelve un boolean,
porque el método Find de List solo acepta como parámetro el Predicate?

Lista.Find(res); //no compila
Lista.Find(res1); //OK




En C# no hay conversión implícita automática de un tipo a otro, aunque
los tipos sean iguales. Por ejemplo, si tienes

delegate bool Del1(int x);
delegate bool Del2(int x);

entonces no puedes usar Del1 en donde se espera un argumento del tipo
Del2, ni al contrario, a pesar de que Del1 y Del2 tienen definiciones
idénticas. Lo mismo ocurre con tu ejemplo de Func y Predicate.

Lo mismo pasa si tienes dos clases Clase1 y Clase2 con una definición
idéntica. No puedes meter un Clase2 donde se espera un Clase1 aunque por
dentro las dos clases sean exactamente iguales.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida