2012-05-09 8 views
7

Ho inciampato su questo codice:String.Contains non richiede parametri in C#?

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

dove path è una stringa e il valore di ritorno dovrebbe essere una stringa pure.

Allthough path.Contains 'intellisense suggerisce un parametro, funziona bene senza uno.

Come funziona esattamente? C'è un modo per copiare questo comportamento in vb.net?

risposta

7

FirstOrDefault prende un delegato (un Func<T, bool>) e questa chiamata è la creazione di un delegato dal gruppo metodo. E 'equivalente a:

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

Ho il sospetto che in VB.NET si potrebbe fare:

Return knownSeparators.FirstOrDefault(AddressOf path.Contains) 

... ma non ho potuto dire di sicuro senza provarlo.

+0

Purtroppo, si dà ancora lo stesso errore dicendo che richiede un parametro (dopo aver aggiunto l'indirizzoOf) – Terry

+0

@djerry: Ho modificato per rimuovere le parentesi - vedere se questo aiuta. –

+0

anzi, che se ne è sbarazzato, stava educando, grazie. – Terry