2013-08-08 11 views
0

еще одна проблема, которую я не могу понять, еще раз. Я получаю пользовательские права, ранее добавленные моим кодом в MailItem. Я в настоящее время тестирования с прогнозом 2010 года, это так же просто, как иНевозможно получить значение из прогноза ItemProprieties: Не удалось выполнить операцию

Dim mailIndex 
For mailIndex = objFolder.Items.Count To 1 Step - 1 
    Dim property1 
    Set property1 = GetMigrationProperty(objFolder.Items(mailIndex).ItemsProprieties) 
    '... code goes on 
    Next 

После второй итерации цикла, property1.Value является «Operation Failed», и это вызывает исключение. Зачем?

PS: У меня есть эта проблема, так как я изменил тип петли из Для каждого Ань инвертирования для

ответ

2

Уча! Это ваш настоящий код? Это кратная точка, принятая до крайности.

Cache в Items переменных перед входом в цикл и называющие Items (индекс) только один раз за итерацию:

set Items = objFolder.Items 
For mailIndex = Items.Count To 1 Step - 1 
    Dim property1 
    set Item = Items.Item(mailIndex) 
    Set property1 = GetMigrationProperty(item.ItemsProprieties) 
    '... code goes on 
    set item = Nothing 
Next 
+0

Кроме того, если вы звоните GetMigrationProperty более чем один раз, кэшировать значение коллекции item.ItemsProprieties и магазина это в локальной переменной. Сбросьте его обратно на север в конце петли. –

+0

Я вижу, это действительно работает. Могу ли я спросить, почему важно выпустить объект объекта после каждого цикла? Если я правильно понимаю, объект items содержит ссылку на mailItem, если мы не выпустим его, эта ссылка будет заменена другой на следующей итерации. Почему это важно и как это может вызвать проблемы? Я из фона SharePoint/C#, поэтому это выглядит странно для меня. – Machinegon

+0

Если вы используете многоточечную нотацию, интерпретатор/компилятор создает неявные переменные для хранения промежуточных переменных, и вы не можете явно получать или освобождать эти переменные. Они освобождаются, когда они выходят из области видимости в сценарии VB или всякий раз, когда GC чувствует себя в C#/VB.Net. Эта проблема намного более глубока в языках .Net по сравнению с VB-скриптом. –