2013-12-18 6 views
0

Вопрос фон:Cast в списке отфильтрованных ожидающих изменений

Я проверяю в файлах в VS 2012 TFS программный и разработал следующий код, чтобы фильтровать ожидающие изменения на основе конкретного имени файла:

internal int CheckinTfsQaItem(IVersionControlItem tfsItem) 
    { 
     //Get the current workspace info. 
     var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(_checkedoutTfsItem.VcQaFolder); 

     //Get the TFS project object from the specified server path. 
     var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri); 

     //Get the workspace. 
     var workspace = workspaceInfo.GetWorkspace(server); 

     //Filter the pendingChanges object to checkin in only the specified checked out file by it's name. 
     PendingChange[] pendingChanges = (PendingChange[])workspace.GetPendingChanges().Where(x => x.FileName == tfsItem.Name); 

     //Check in the change, dont set a comment. 
     return workspace.CheckIn(pendingChanges, null); 
    } 

вопрос:

Intellisense не показывает никаких ошибок, но когда я отладку, я получаю ошибку литого исключения ш пытаясь преобразовать особый объект PendingChange в один список объектов PendingChange, т. е. массив PendingChanges.

Здесь ошибка броска:

Результат Сообщение:
метод Test ADPTestProject.TFStests.Check_Facade_CheckIn_Method кинул исключение: System.InvalidCastException: Невозможно привести объект типа «WhereArrayIterator`1 [Microsoft.TeamFoundation .VersionControl.Client.PendingChange] 'totype' Microsoft.TeamFoundation.VersionControl.Client.PendingChange [] '.

Может ли кто-нибудь сказать мне, почему этот бросок терпит неудачу?

ответ

1
PendingChange[] pendingChanges = (PendingChange[])workspace.GetPendingChanges().Where(x => x.FileName == tfsItem.Name); 

просто добавьте .ToArray() в конце этой строки.

и удалите отливку.

так

var pendingChanges = workspace.GetPendingChanges() 
           .Where(x => x.FileName == tfsItem.Name) 
           .ToArray(); 
+0

Спасибо! Не могу поверить, что я пропустил это. Теперь он отлично работает. Я буду отмечать ваш ответ как правильный, когда мне разрешат. – user1352057

1

Использование .ToArray() это вернет запрос в массив PendingChange:

PendingChange[] pendingChanges = workspace.GetPendingChanges().Where(x => x.FileName == tfsItem.Name).ToArray(); 
1

Должно быть

workspace.GetPendingChanges().Where(x => x.FileName == tfsItem.Name).ToArray(); //<-- 
Смежные вопросы