blu*_*blu 156 .net c# linq generics func
我可以将带有out参数的方法作为Func传递吗?
public IList<Foo> FindForBar(string bar, out int count) { }
// somewhere else
public IList<T> Find(Func<string, int, List<T>> listFunction) { }
Run Code Online (Sandbox Code Playgroud)
Func需要一个类型,因此不会在那里编译,并且调用listFunction需要一个int并且不允许输入.
有没有办法做到这一点?
Meh*_*ari 215
ref并且out不是类型参数定义的一部分,因此您不能使用内置Func委托来传递ref和out参数.当然,如果需要,您可以声明自己的委托:
delegate V MyDelegate<T,U,V>(T input, out U output);
Run Code Online (Sandbox Code Playgroud)
Cha*_*ion 23
为什么不创建一个类来封装结果?
public class Result
{
public IList<Foo> List { get; set; }
public Int32 Count { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
naw*_*fal 13
该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)
Run Code Online (Sandbox Code Playgroud)
这样的代表可以有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)
Run Code Online (Sandbox Code Playgroud)
只有两个参数.我们甚至没有碰过ref.对于开发人员来说,这实际上是麻烦和混乱的.
| 归档时间: |
|
| 查看次数: |
46579 次 |
| 最近记录: |