APISampleUnitTestsCS.FAQ.ResolveOverloads C# (CSharp) Метод

ResolveOverloads() приватный Метод

private ResolveOverloads ( ) : void
Результат void
        public void ResolveOverloads()
        {
            var source = @"
            using System;
            class Program
            {
            static void M()
            {
            }
            static void M(long l)
            {
            }
            static void M(short s)
            {
            }
            static void M(int i)
            {
            }
            static void Main()
            {
            // Perform overload resolution here.
            }
            }";
            var tree = SyntaxTree.ParseText(source);
            var mscorlib = MetadataReference.CreateAssemblyReference("mscorlib");
            var compilation = Compilation.Create("MyCompilation",
                syntaxTrees: new[] { tree }, references: new[] { mscorlib });
            var model = compilation.GetSemanticModel(tree);

            // Get MethodSymbols for all MethodDeclarationSyntax nodes with name 'M'.
            IEnumerable<MethodSymbol> methodSymbols = tree.GetRoot()
                .DescendantNodes().OfType<MethodDeclarationSyntax>()
                .Where(m => m.Identifier.ToString() == "M")
                .Select(m => model.GetDeclaredSymbol(m));

            // Perform overload resolution at the position identified by the comment '// Perform ...' above.
            var position = source.IndexOf("//");
            OverloadResolutionResult<MethodSymbol> overloadResults = model.ResolveOverloads(
                position,                                              // Position to determine scope and accessibility.
                ReadOnlyArray<MethodSymbol>.CreateFrom(methodSymbols), // Candidate MethodSymbols.
                ReadOnlyArray<TypeSymbol>.Empty,                       // Type Arguments (if any).
                ReadOnlyArray<ArgumentSyntax>.CreateFrom(              // Arguments.
                    Syntax.Argument(
                        Syntax.LiteralExpression(                      // OR Syntax.ParseExpression("100")
                            SyntaxKind.NumericLiteralExpression, Syntax.Literal("100", 100)))));
            Assert.IsTrue(overloadResults.Succeeded);

            var results = string.Join("\r\n", overloadResults.Results
                .Select(result => string.Format("{0}: {1}{2}",
                    result.Resolution, result.Member, result.IsValid ? " [Selected Candidate]" : string.Empty)));

            Assert.AreEqual(@"Worse: Program.M(long)
            Worse: Program.M(short)
            ApplicableInNormalForm: Program.M(int) [Selected Candidate]", results);
        }