Почему Вы пытаетесь получить версию модуля? Вам нужно это из программы, Вам просто нужно число для передачи другой операции, или Вы просто пытаетесь узнать то, что Вы имеете?
мне встроили это в cpan
(который идет с жемчугом) с эти -D
переключатель, таким образом, Вы видите версию, которую Вы установили и текущая версия на CPAN:
$ cpan -D Text::CSV_XS Text::CSV_XS ------------------------------------------------------------------------- Fast 8bit clean version of Text::CSV H/HM/HMBRAND/Text-CSV_XS-0.54.tgz /usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/Text/CSV_XS.pm Installed: 0.32 CPAN: 0.54 Not up to date H.Merijn Brand (HMBRAND) h.m.brand@xs4all.nl
, Если Вы хотите видеть все устаревшие модули, используйте -O
(капитал O) переключатель:
$ cpan -O Module Name Local CPAN ------------------------------------------------------------------------- Apache::DB 0.1300 0.1400 Apache::SOAP 0.0000 0.7100 Apache::Session 1.8300 1.8700 Apache::SizeLimit 0.0300 0.9100 Apache::XMLRPC::Lite 0.0000 0.7100 ... and so on
, Если Вы хотите видеть это для всех модулей, Вы установили, попробуйте эти -a
переключатель для создания автопакета.
Я думаю, что пункт соединения LINQ не является правильным решением этой проблемы из-за пункта соединения, цель не состоит в том, чтобы накопить данные таким способом как требуется к этому решению для задачи. Код для слияния созданных отдельных наборов становится слишком сложным, возможно, он хорошо для изучения целей, но не для реальных приложений. Один из путей, как решить эту проблему, находится в коде ниже:
class Program
{
static void Main(string[] args)
{
List<FirstName> firstNames = new List<FirstName>();
firstNames.Add(new FirstName { ID = 1, Name = "John" });
firstNames.Add(new FirstName { ID = 2, Name = "Sue" });
List<LastName> lastNames = new List<LastName>();
lastNames.Add(new LastName { ID = 1, Name = "Doe" });
lastNames.Add(new LastName { ID = 3, Name = "Smith" });
HashSet<int> ids = new HashSet<int>();
foreach (var name in firstNames)
{
ids.Add(name.ID);
}
foreach (var name in lastNames)
{
ids.Add(name.ID);
}
List<FullName> fullNames = new List<FullName>();
foreach (int id in ids)
{
FullName fullName = new FullName();
fullName.ID = id;
FirstName firstName = firstNames.Find(f => f.ID == id);
fullName.FirstName = firstName != null ? firstName.Name : string.Empty;
LastName lastName = lastNames.Find(l => l.ID == id);
fullName.LastName = lastName != null ? lastName.Name : string.Empty;
fullNames.Add(fullName);
}
}
}
public class FirstName
{
public int ID;
public string Name;
}
public class LastName
{
public int ID;
public string Name;
}
class FullName
{
public int ID;
public string FirstName;
public string LastName;
}
, Если реальное количество является большим для формирования HashSet вместо этого, циклы foreach могут использоваться код ниже:
List<int> firstIds = firstNames.Select(f => f.ID).ToList();
List<int> LastIds = lastNames.Select(l => l.ID).ToList();
HashSet<int> ids = new HashSet<int>(firstIds.Union(LastIds));//Only unique IDs will be included in HashSet