private Union CreateUnion(Type t) { Union u = new Union(); u.TagReader = FSharpFunc <object, int> .ToConverter(FSharpValue.PreComputeUnionTagReader(t, null)); u.Cases = new List <UnionCase>(); UnionCaseInfo[] cases = FSharpType.GetUnionCases(t, null); foreach (UnionCaseInfo unionCaseInfo in cases) { UnionCase unionCase = new UnionCase(); unionCase.Tag = unionCaseInfo.Tag; unionCase.Name = unionCaseInfo.Name; unionCase.Fields = unionCaseInfo.GetFields(); unionCase.FieldReader = FSharpFunc <object, object[]> .ToConverter(FSharpValue.PreComputeUnionReader(unionCaseInfo, null)); unionCase.Constructor = FSharpFunc <object[], object> .ToConverter(FSharpValue.PreComputeUnionConstructor(unionCaseInfo, null)); u.Cases.Add(unionCase); } return(u); }
public FSharpAsync <Unit> ExecuteAsyncJobOnUiContext(SynchronizationContext context, FSharpFunc <Unit, FSharpAsync <Unit> > action) { FSharpAsync.SwitchToContext(uiSynchronizationContext); var func = FSharpFunc <Unit, FSharpAsync <Unit> > .ToConverter(action); func.DynamicInvoke(); return(FSharpAsync.SwitchToContext(context)); }
public void FSharpFunc() { Equal(I.Module.ReturnsFunc().Invoke(3), 3); Equal(I.Module.ReturnsFunc2().Invoke(1).Invoke(2), 3); Func <int, int> f = I.Module.ReturnsFunc().Invoke; Equal(f(3), 3); Equal(I.Module.InvokeFunc(FSharpConvert.Fun((int x) => x + 1), 1), 2); Equal(I.Module.InvokeFunc2(FSharpConvert.Fun((int x, int y) => x + y), 1, 2), 3); Equal(I.Module.InvokeFunc(FuncConvert.FromFunc((int x) => x + 1), 1), 2); Equal(I.Module.InvokeFunc2(FuncConvert.FromFunc((int x, int y) => x + y), 1, 2), 3); Equal(I.Module.InvokeFunc(FuncConvert.ToFSharpFunc((int x) => x + 1), 1), 2); var c = FSharpFunc <int, int> .ToConverter(I.Module.ReturnsFunc()); Equal(c(3), 3); var f2 = FSharpFunc <int, int> .FromConverter(c); Equal(f2.Invoke(3), 3); }