You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中如何将函数参数中的Func替换为自定义委托?

问题解答

首先明确:Func<T>确实是一个返回T类型的泛型委托,但你的两种写法都存在语法错误,下面逐一说明问题并给出正确实现:

第一种写法的问题

你尝试直接在方法参数中声明泛型委托,这是C#语法不允许的:

// 错误写法:不能在参数列表内直接定义泛型委托类型
T CallFunction<T>(delegate T lambda<T>())
{
  return lambda();
}

C#要求委托类型必须提前定义(要么用内置的如Func<T>,要么自己声明自定义委托),不能在方法参数里临时声明。

第二种写法的问题

你定义了泛型委托MyLambda<T>,但在方法参数中使用时没有指定泛型类型参数:

delegate T MyLambda<T>();

// 错误写法:泛型委托MyLambda<T>需要指定类型参数<T>
T CallFunction<T>(MyLambda lambda)
{
  return lambda();
}

泛型类型在使用时必须具体化,这里应该把参数写成MyLambda<T>,而不是MyLambda。

正确的自定义委托实现

修正后的代码如下:

// 提前定义泛型委托
delegate T MyLambda<T>();

// 方法参数使用带类型参数的泛型委托
T CallFunction<T>(MyLambda<T> lambda)
{
  return lambda();
}

关于Func<T>的本质

.NET框架已经预定义了一系列泛型委托,Func<T>就是其中之一,它的定义和你自己写的MyLambda<T>完全等价:

public delegate T Func<out T>();

所以使用Func<T>其实就是省去了自己定义委托的步骤,直接用框架提供的现成类型而已。

内容的提问来源于stack exchange,提问作者hyt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:53:18