Func() public static method

public static Func ( int args ) : CodeTypeReference
args int
return System.CodeDom.CodeTypeReference
Exemplo n.º 1
0
        static CodeMemberMethod XF(int args)
        {
            var t = new CodeTypeReference("System.Linq.Expressions.Expression", Types.Func(args));
            var m = CreateMethod("XF", t, "expr", args, true);

            m.Comments.AddDocs(
                XmlDocs.TypeParams(m.TypeParameters, t),
                XmlDocs.Param("expr", "The " + XmlDocs.See(t) + " to return."),
                XmlDocs.Summary("Creates a " + XmlDocs.See(t) + " expression tree."),
                XmlDocs.Returns("Returns <paramref name=\"expr\" />.")
                );
            return(m);
        }
Exemplo n.º 2
0
        static CodeMemberMethod F(int args)
        {
            var t = Types.Func(args);
            var m = CreateMethod("F", t, "lambda", args, true);

            m.Comments.AddDocs(
                XmlDocs.TypeParams(m.TypeParameters, t),
                XmlDocs.Param("lambda", "The " + XmlDocs.See(t) + " to return."),
                XmlDocs.Summary("Creates a " + XmlDocs.See(t) + " delegate."),
                XmlDocs.Returns("Returns <paramref name=\"lambda\" />.")
                );
            return(m);
        }
Exemplo n.º 3
0
        static CodeMemberMethod RecFunc(int args)
        {
            var t = Types.Func(args);
            var m = new CodeMemberMethod()
            {
                Attributes = MemberAttributes.Static | MemberAttributes.Public,
                Name       = "RecFunc",
                ReturnType = t,
            };

            m.TypeParameters.AddRange(Types.GetTypeParameters(args, true).ToArray());
            var a = "lambda";

            m.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference("Func", t, t), a));
            m.Statements.ThrowWhenArgumentIsNull(a);
            var expr = AppendArgs(new StringBuilder(), args);

            expr.Append(" => lambda (RecFunc (lambda))");
            AppendArgs(expr, args);
            m.Statements.Add(new CodeMethodReturnStatement(new CodeSnippetExpression(expr.ToString())));
            m.Comments.AddRange("From: http://blogs.msdn.com/madst/archive/2007/05/11/recursive-lambda-expressions.aspx");
            m.Comments.AddDocs(
                XmlDocs.TypeParams(m.TypeParameters, t),
                XmlDocs.Param("lambda", "The " + XmlDocs.See(t) + " to use."),
                XmlDocs.Summary("Creates a " + XmlDocs.See(t) + " delegate, which may be recursive."),
                XmlDocs.Returns("Returns a " + XmlDocs.See(t) + " which (eventually) invokes <paramref name=\"lambda\"/>."),
                XmlDocs.ArgumentNullException("lambda"),
                XmlDocs.Remarks(
                    "<para>",
                    "  The following example makes use of a recursive lambda:",
                    "</para>",
                    "<code lang=\"C#\">",
                    "  Func<int, int> factorial = Lambda.RecFunc<int, int> (".Replace("<", "&lt;"),
                    "      fac => x => x == 0 ? 1 : x * fac (x-1));",
                    "  Console.WriteLine (factorial (5));  // prints \"120\"",
                    "</code>"
                    )
                );
            return(m);
        }