Question: J'ai un code pour le cryptage pgp d'ici: http://blogs.microsoft.co.il/blogs/kim/archive/2009/01/23/pgp-zip-encrypted-files-with-c.aspxComment remplacer l'expression Linq Cast?
Il a la méthode ci-dessous, en utilisant certains LINQ. Je suis toujours sur. NET 2.0 et ne peut pas passer plus haut, encore ...
Comment puis-je remplacer cette expression par du code ordinaire? Je ne comprends pas vraiment Linq, je suppose qu'il fait un peu de tri?
private PgpSecretKey GetFirstSecretKey(PgpSecretKeyRingBundle secretKeyRingBundle)
{
foreach (PgpSecretKeyRing kRing in secretKeyRingBundle.GetKeyRings())
{
PgpSecretKey key = kRing.GetSecretKeys()
.Cast<PgpSecretKey>()
.Where(k => k.IsSigningKey)
.FirstOrDefault();
if (key != null)
return key;
}
return null;
}
Comme un sidenote, vous avez omis if (key! = null), mais il doit être vérifié avant le "if (key.IsSigningKey)", donc il ressemble à 2 bugs, un dans le vôtre, un autre dans le code d'origine. Et puisque vous avez écrit "quelque chose comme", il se qualifie comme un bug, dans l'original. –
@Quandary: Donc 'GetSecretKeys()' peut-il renvoyer des valeurs nulles? Cela semblerait étrange. Le résultat de 'FirstOrDefault' pourrait évidemment être nul, mais c'est une question différente. –
Il pourrait, si le contenu du fichier d'entrée KeyRingBundle est incorrect. –