簡體   English   中英

需要幫助使用 c# 代表 function

[英]Need help using c# delegate function

delegate bool Function(int num);
static Function GreatThan10 = delegate(int n){return n >= 10; };    //there is error  

class Program
{

    static List<int> Traverse(List<int> myList, Function function)
    {
        var list = new List<int>();
        foreach (var item in myList)
        {
            if (function(item))
            {
                list.Add(item);
            }

        }
        return list;
    }       

當我使用 c# 委托時,我發現有一個錯誤。 另外我想知道它的委托是否與 php 回調 function 相同?

我只是在學習 c#,感覺它的資源比 JAVA 相對較少。 我想通過書籍深入學習。有好書可以推薦給我嗎?

您的delegate聲明僅顯示 function 必須具有的形狀,以便在Function存在的地方有資格作為輸入。 您不必將 Function 本身聲明為代表。 它可以只是一個普通的Function:

static bool GreatThan10(int n) 
{ 
    return n >= 10; 
}

然后你可以將它作為參數傳遞給 Traverse,例如:

var bigNumbers = Traverse(new List<int> {1, 10, 100}, GreatThan10);

您只需在 class 程序中移動 GreatThan10 字段。 代碼的第一行只是定義一個新的委托,它接受一個 int 參數並返回一個 bool。 GreatThan10 是該委托類型的引用,因此它必須是 class 的成員。

您還詢問了委托是否與 PHP 回調函數相同。 我會說委托是一種表示對方法的引用的類型。 您使用一些參數和返回類型聲明它,然后您可以創建該委托的新引用,該引用指向具有相同參數類型和返回類型的某些方法。

試試這個解決方案,你應該不會有任何問題。

using System;
using System.Collections.Generic;

delegate bool Function(int n);

class Program
{
    static Function GreatThan10 = delegate(int n) { return n > 10; };

    static void Main(string[] args)
    {
        List<int> list = new List<int>();

        Traverse(list, GreatThan10);

        Console.ReadKey();
    }

    static List<int> Traverse(List<int> myList, Function function)
    {
        var list = new List<int>();
        foreach (var item in myList)
        {
            if (function(item))
            {
                list.Add(item);
            }

        }
        return list;
    }
}

暫無
暫無

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

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