簡體   English   中英

委托參數

[英]Delegate in parameter

我有一堆返回GridTiles列表的方法,例如GetTopNeighbour。 我希望能夠使用GetNeighboursHandler委托作為參數將它們傳遞給方法AutoConnect。

    public delegate List<GridTile> GetNeighboursHandler(GridTile c);

    public List<GridTile> GetTopNeighbour(GridTile c)
    {
        //do stuff and return list
        return null;
    }
     public GridTile AutoConnect(GridTile c, GetNeighboursHandler del)
    {
        List<GridTile> tempList = del(c);

        // do stuff with the tempList
    }

    public void Test(GridTile c)
    {
        AutoConnect(c, GetTopNeighbour(c));
    }

在Test方法中,我得到錯誤:...無法將... Generic.List ...轉換為GetNeighboursHandler。 我是否完全誤解了代表的工作方式?

您需要傳遞一個delegate (一個知道如何調用該方法的對象,即:它包含一個方法的引用),您要做的就是傳遞執行后得到的函數結果GetTopNeighbour(c)返回一個List<GridTile> ,您將在此處的代碼中傳遞此返回值

AutoConnect(c, GetTopNeighbour(c));

相反,您應該將引用傳遞給該方法GetTopNeighbour

AutoConnect(c, GetTopNeighbour);

請參考這些這是一本教程這是另一本

您必須傳遞方法(或方法組)本身,而不是調用它:

AutoConnect(c, GetTopNeighbour);

您正在傳遞GetTopNeighbour(c)的結果,該結果是List<GridTile> ,作為AutoConnect的參數。

相反,您希望將MethodGroup傳遞給委托,如下所示:

AutoConnect(c, GetTopNeighbour);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM