2013-12-18 62 views
0

問題背景:角色轉換錯誤

我檢查的文件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不顯示任何錯誤,但是當我調試,我收到一個轉換異常錯誤w ^試圖將PendingChange單數對象轉換爲PendingChange對象的單個列表,即PendingChanges數組。

這裏是被拋出的錯誤:

結果消息:
試驗方法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(); //<--