У меня была te ошибка , Взаимодействие с пользователем не позволяется и решило ее путем разблокирования связки ключей сначала
security unlock-keychain /Users/yannooo/Library/Keychains/login.keychain
, я также попытался поместить свои сертификаты в связку ключей Системы, и она работала. Мое конечное решение состояло в том, чтобы поместить все мои связанные с iPhone сертификаты в специальную связку ключей, названную iPhone.keychain использование Доступ Связки ключей приложение
security list-keychains -s /Users/yannooo/Library/Keychains/iPhone.keychain
security unlock-keychain -p keychainpassword /Users/yannooo/Library/Keychains/iPhone.keychain
Причина в том, что элементы коллекции содержат экземпляры MailItem и ReportItem. Указание MailItem слева не фильтрует список, а просто указывает, какой тип вы ожидаете в списке.
Что вам нужно сделать, так это отфильтровать нужный тип, поэтому
foreach ( MailItem oItem in theMailFolder.Items.OfType<MailItem>()) {
..
}
Метод OfType будет только вернуть значения в коллекции, соответствующие этому конкретному типу.
Объявление типа в цикле foreach
не фильтруется по типу - вместо этого выдается исключение, как вы заметили.
Это происходит потому, что ] foreach
был введен в C # 1.0, который не поддерживает обобщенные типы. Таким образом, компилятор не может узнать, какой тип возвращает IEnumerator
. (Это все еще верно, если коллекция не реализует IEnumerable
). Nitpickers : Я знаю, что даже в C # 1 можно написать строго типизированный перечислитель (например, List
); подавляющее большинство - нет.
Тогда, если вы случайно поместили неправильный тип в foreach
, вы бы предпочли, чтобы он генерировал исключение, а не таинственным образом ничего не делал.