Вопрос

Вопрос: У меня есть код для шифрования PGP отсюда:http://blogs.microsoft.co.il/blogs/kim/archive/2009/01/23/pgp-zip-encrypted-files-with-c.aspx.

Он имеет метод ниже, используя немного LINQ. Я все еще на .NET 2.0 и не могу переключиться выше ...

Как я могу заменить это выражение обычным кодом? Я не очень понимаю LINQ, я думаю, это какая-то сортировка?

 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;
        }
Это было полезно?

Решение

Что-то типа:

foreach (PgpSecretKeyRing kRing in secretKeyRingBundle.GetKeyRings())
{
    foreach (PgpSecretKey key in kRing.GetSecretKeys())
    {
        if (key.IsSigningKey)
        {
            return key;
        }
    }
}
return null;

foreach неявно Выполняет отливку к типу цели. По общему признанию, оригинальный LINQ был бы более приятно написан как:

return (from keyring in secretKeyRingBundle.GetKeyRings()
        from PgpSecretKey key in keyring.GetSecretKeys()
        where key.IsSigningKey)
       .FirstOrDefault(); 

(Ты мая нужно сделать первый from пункт, сильно набранный тоже; Это зависит от того, что GetKeyRings() объявлен вернуться.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top