[英]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.