Func 委托家族(或 Action 就此而言)只不过是声明为类似的简单委托类型
//.NET 4 and above
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T obj)
//.NET 3.5
public delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
public delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3)
等等。这样的代表可以具有 out/ref 参数,因此在您的情况下,正如其他答案所指出的那样,它只是您自己自定义实现的问题。至于为什么微软默认不打包这个,想想它需要的组合数量。
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(T1 obj1, out T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, out T2 obj2)
只有两个参数。我们甚至没有碰过ref。对于开发人员来说,这实际上会很麻烦且令人困惑。