#c# #android #xamarin #collections #xamarin.android
#c# #Android #xamarin #Коллекции #xamarin.android
Вопрос:
Я пытаюсь получить список установленных приложений из диспетчера пакетов. Я не знаю, как инициализировать или получить список. Это должно быть просто, но мне просто не хватает ссылки или шага.
List<PackageInfo> packageInfo = PackageManager
.GetInstalledApplications(PackageInfoFlags.MetaData);
Ошибка CS0266 Не удается неявно преобразовать тип ‘System.Коллекции.Универсальный.Я перечисляю ‘в’систему.Коллекции.Generic.List’. Существует явное преобразование (вам не хватает приведения?)
Ответ №1:
В конце вам понадобится простой оператор преобразования.
List<PackageInfo> packageInfo = PackageManager
.GetInstalledApplications(PackageInfoFlags.MetaData) as List<PackageInfo>;
Комментарии:
1. Спасибо. Теперь я знаю, как я мог бы также выполнить приведение
List
.
Ответ №2:
В зависимости от ваших потребностей вы можете придерживаться IList
IList<PackageInfo> packageInfo = PackageManager
.GetInstalledPackages(PackageInfoFlags.MetaData);
Если вам действительно нужен экземпляр List
call ToList
(требуется using System.Linq;
)
List<PackageInfo> packageInfo = PackageManager
.GetInstalledPackages(PackageInfoFlags.MetaData)
.ToList();
Комментарии:
1. Будет ли приведение его к
List<PackageInfo>
более производительному по сравнению с вызовомToList()
?2. @S.tenBrinke если
GetInstalledApplications
возвращает фактическийList
экземпляр, тоToList
вызов не будет выполнять итерацию через collection и выполнит копирование массива, что довольно быстро, но да, в этом случае приведение выполняется более производительно. Но еслиGetInstalledApplications
возвращает что-либо еще, влияющее наIList
интерфейс, но это не так,List
тогдаToList
будет созданList
экземпляр, и приведение вернетnull
.
Ответ №3:
Будет ли использование var packageInfo
вместо List<PackageInfo>
соответствовать вашим потребностям? Ответ @ mtv также может сработать, но я думаю, что использование var лучше для производительности и удобочитаемости
Комментарии:
1. Я узнал об этом,
IList
когда я выполнял отладку сvar
объявлением. Спасибо
Ответ №4:
Да. var
работает.
На самом деле там был неправильный класс. Это должен быть ApplicationInfo
класс.
Таким образом, это либо
IList<ApplicationInfo> packageInfo = PackageManager
.GetInstalledApplications(PackageInfoFlags.MetaData);
или
var packageList = PackageManager
.GetInstalledApplications(PackageInfoFlags.MetaData);
Да, так и должно быть IList
. Спасибо.
Комментарии:
1. Если я использую,
PackageManager.GetInstalledPackages(PackageInfoFlags.MetaData);
тогда это будетIList<PackageInfo>
.