2013-01-21 54 views
0

我需要將SharpSvn.SvnListEventArgs類型的Collection<T>傳遞給svnClient.GetList方法。 T類型需要在運行時解決,因爲這用於MSBuild內聯任務。該GetList方法調用拋出運行時錯誤作爲使用反射創建集合<T>

的最佳重載的方法匹配「SharpSvn.SvnClient.GetList(SharpSvn.SvnTarget, out System.Collections.ObjectModel.Collection<SharpSvn.SvnListEventArgs>)」有一些無效參數

下面的代碼片段,我試過了。我該如何解決這個問題?

 System.Type t = svntask.GetType("SharpSvn.SvnListEventArgs"); 
    //System.Collections.ObjectModel.Collection<System.EventArgs> branchfolderlist = new System.Collections.ObjectModel.Collection<System.EventArgs>(); 

    System.Type genericType = typeof(System.Collections.ObjectModel.Collection<>); 
    System.Type constructedType = genericType.MakeGenericType(t); 

    var branchfolderlist = System.Activator.CreateInstance(constructedType); 


    //branchfolderlist = svntask.GetType("SharpSvn.SvnListEventArgs")branchfolderlist; 
    //System.Collections.ObjectModel.Collection<System.Object> branchfolderlist; 

    dynamic svnTarget = svntask.GetType("SharpSvn.SvnTarget").GetMethod("FromUri").Invoke(null, new object[] { new System.Uri(destinationBranch) }); 

    //svntask.GetType("SharpSvn.SvnClient").GetMethod("GetList").Invoke(null, System.Reflection.BindingFlags.InvokeMethod, null, new object[] { svnTarget, branchfolderlist }, null); 

    svnClient.GetList(svnTarget, out branchfolderlist); 

    return true; 

在此先感謝!

+1

下次嘗試擺脫不必要的評論。這極大地提高了可讀性。 – Oybek

回答

2

問題是branchfolderlist的聲明類型是object。將其更改爲dynamic應該可以做到。

+0

謝謝,dynamic確實解決了branchfolderlist的問題。現在我有svnTarget參數的問題,不斷得到原來的帖子。不知道可能是什麼問題,因爲我能夠在另一個方法調用中以相同的方式傳遞svnTarget。將輸出參數導致問題? – Karun

+0

@Karun:你得到的錯誤是什麼? –

+0

它是相同的錯誤 之前的最好重載方法匹配「SharpSvn.SvnClient.GetList(SharpSvn.SvnTarget,出System.Collections.ObjectModel.Collection )」具有一些無效參數 如果我改變** svntarget **作爲**新的SharpSvn.SvnTarget .... **,然後上述錯誤消失,並獲得綁定上不同的運行時錯誤... 這就是說,由於原來的問題得到解決,我將你的第一個回答標記爲答案。 – Karun