Как заменить литье LINQ.
Вопрос
Вопрос: У меня есть код для шифрования 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()
объявлен вернуться.)
Не связан с StackOverflow