我可以将带有out参数的方法作为Func传递吗?
public IList<Foo> FindForBar(string bar, out int count) { }
// somewhere else
public IList<T> Find(Func<string, int, List<T>> listFunction) { }
listFunction需要一个类型,这样out就不会在那里编译,而调用Func需要int,并且不允许out in。
有没有办法做到这一点?
发布于 2009-08-15 23:54:27
ref
和out
不是类型参数定义的一部分,因此不能使用内置的Func
委托来传递ref
和out
参数。当然,如果你愿意,你可以声明你自己的委托:
delegate V MyDelegate<T,U,V>(T input, out U output);
发布于 2009-08-15 23:51:20
为什么不创建一个类来封装结果呢?
public class Result
{
public IList<Foo> List { get; set; }
public Int32 Count { get; set; }
}
发布于 2013-12-13 14:26:07
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
。这实际上会给开发人员带来麻烦和困惑。
https://stackoverflow.com/questions/1283127
复制相似问题