2012-05-09 19 views
7

He encontré con este código:String.Contains no requiere parámetros en C#?

var knownSeparators = new[] { "\\", "/", "|", "." }; 
return knownSeparators.FirstOrDefault(path.Contains); 

donde ruta es una cadena y el valor de retorno debe ser una cadena también.

Allthough path.Contains 'intellisense sugiere un parámetro, funciona bien sin uno.

¿Cómo funciona esto exactamente? ¿Hay alguna forma de copiar este comportamiento en vb.net?

Respuesta

7

FirstOrDefault toma un delegado (un Func<T, bool>) y esta llamada es la creación de un delegado del grupo método. Es equivalente a:

Func<string, bool> predicate = path.Contains; 
return knownSeparators.FirstOrDefault(predicate); 

sospecho en VB.NET que podría hacer:

Return knownSeparators.FirstOrDefault(AddressOf path.Contains) 

... pero no podía decir con seguridad sin probarlo.

+0

Lamentablemente, todavía da el mismo error al decir que requiere un parámetro (después de agregar la direcciónDeOb) – Terry

+0

@djerry: He editado para eliminar los corchetes - ver si eso ayuda. –

+0

de hecho, que se deshizo de él, fue educando, gracias. – Terry