簡體   English   中英

如何用 func 委托替換 Action 委托返回一個函數值

[英]How to replace Action delegate with a func delegate return a value to function

我有一個名為 CompleteDownload 的函數,它采用 int 參數,我想打印此函數中的百分比

public void CompletedDownload(int percentage)
{    
    Console.WriteLine(mID+":"+percentage+"% Loading is Completed");
 }

我有一個功能:

public void LoadProcedure(int n,Action<int> inAction)
    {   
      // LoadingDisplay loadingDisplay=new LoadingDisplay(n);
        for(int i=0;i<=n;i++)
        {
            if(i==n/4)
            {   

                inAction(i);


            }
        }
     }

我想使用 func 委托將 i 值返回給 Completeddownload 函數是什么方法

Loading loading=new Loading();
loading.LoadProcedure(100,display.CompletedDownLoad);

並幫助我主要如何指定它。

在您的示例中,您似乎不需要對響應執行任何操作。 因此,您CompletedDownload嘗試從CompletedDownload方法返回值,而是可以處理您的操作,並在滿足條件時簡單地中斷循環。

public void LoadProcedure(int n, Action<int> inAction)
{
    // LoadingDisplay loadingDisplay=new LoadingDisplay(n);
    for (int i = 0; i <= n; i++)
    {
        if (i == n / 4)
        {
            inAction(i);
            break;
        }
    }
}

這將運行您的操作,退出循環,並返回到調用方法。

如果您絕對需要返回觸發操作的輸入變量,只需將LoadProcedure的返回類型從 void 更改為 int 並返回結果。

var result = loading.LoadProcedure(100,display.CompletedDownLoad);

public int LoadProcedure(int n, Action<int> inAction)
{
    // LoadingDisplay loadingDisplay=new LoadingDisplay(n);
    for (int i = 0; i <= n; i++)
    {
        if (i == n / 4)
        {
            inAction(i);
            return i;
        }
    }
}

沒有必要將inAction更改為Func<>因為您當前沒有在 inAction 中進行任何計算。

暫無
暫無

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

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