public delegate voidActionRef1<TRef>(ref TRef argRef1); public delegate void ActionRef1<T, TRef> (T arg1, ref TRef argRef1); ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) public delegate void ActionRef4<TRef1, TRef2, TRef3, TRef4>(ref TRef1 argRef1, ref TRef2 argRef2, ref TRef3 argRef3, ref TRef4 argRef4); ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) public delegate TReturn FuncOut4<TOut1, TOut2, TOut3, TOut4, TReturn>(out TOut1 argOut1, out TOut2 argOut2, out TOut3 argOut3, out TOut4 argOut4); ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) ( 省略 ) public delegate TReturn FuncOut8<TOut1, TOut2, TOut3, TOut4, TOut5, TOut6, TOut7, TOut8, TReturn>( out TOut1 argOut1, out TOut2 argOut2, out TOut3 argOut3, out TOut4 argOut4, out TOut5 argOut5, out TOut6 argOut6, out TOut7 argOut7, out TOut8 argOut8); Generated by ConsoleApplication31.exe (144 デリゲート型 )
10.
多値返却 (もどき ) 構想 モデルケース : bool int.Parse(string, out int value) bool(string, out int) を Tuple<bool, int>(string) にすればできる! Tuple は .NET FX 4.0 で正式に導入されます 実装は簡単なのでちょいと作るなり外から持ってくるなり そんな感じで、作ってみました
11.
public delegate TReturnFuncOut1<T, TOut, TReturn> (T arg1, out TOut argOut1); public struct Tuple<T1, T2> { public T1 Item1; public T2 Item2 ; public Tuple(T1 item1, T2 item2) { Item1 = item1; Item2 = item2; } } public static class Extension { public static Tuple<TReturn, TOut> InvokeMulti <T, TOut, TReturn> (this FuncOut1<T, TOut, TReturn> func, T arg) { TOut value; return new Tuple<TReturn, TOut> (func(arg, out value), value); } }