Func(T)可以接受C#中的引用类型变量。
static void Main()
{
Func<string,int, int> method = Work;
method.BeginInvoke("test",0, Done, method);
// ...
//
}
static int Work(ref string s,int a) { return s.Length; }
static void Done(IAsyncResult cookie)
{
var target = (Func<string, int>)cookie.AsyncState;
int result = target.EndInvoke(cookie);
Console.WriteLine("String length is: " + result);
}
我无法定义一个可以接受ref类型输入参数的func。有人请指教......
答案 0 :(得分:5)
Func<T>
代表无法获取ref
个参数
您需要创建自己的委托类型,该类型需要ref
个参数。
但是,您首先不应该使用ref
。
答案 1 :(得分:3)
扩展SLaks答案。
Func<T>
个委托系列是通用的,允许您自定义参数的类型和返回。虽然ref
对C#的类型系统有贡献,但它实际上并不是CLR级别的类型:它是一个存储位置修饰符。因此,不可能使用通用实例来控制特定位置是否为ref
。
如果可能的话,很容易产生完全无效的代码。请考虑以下
T Method<T>() {
T local = ...;
...
return local;
}
现在考虑如果开发人员调用Method<ref int>()
会发生什么。它将生成本地和返回值ref
。这将导致无效的C#代码。