This article is available in English.
Pour faire suite à mon
précédent article où j'avais besoin d'être capable d'intercepter les exceptions dans une requête, j'ai constaté qu'il est possible de spécifier plusieurs clauses Where dans une requête LINQ.
Voici la requête en question :
var q = from file in Directory.GetFiles(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727", "*.dll")
let asm = file.TryWith(f => Assembly.LoadFile(f))
where asm != null
let types = asm.TryWith(a => a.GetTypes(), (Exception e) => new Type[0])
where types.Any()
select new { asm, types };
Cette requête permet de trouver la liste des assemblies pour lesquelles il est possible d'en lister les types. L'intéret de placer plusieurs clause where est de ne pas avoir à évaluer inutilement des morceaux d'une query, si les morceaux précédents permettent de le savoir. Au passage, le TryWith autour du Assembly.GetTypes() est la pour intercepter des exceptions de chargement de types, au cas où des dependances ne seraient pas disponibles au moment de l'énumération.
C'est une petite astuce LINQ à savoir :)