コード例 #1
0
        private static void AddToList(
            RefactoringContext context,
            ExpressionSyntax expression,
            INamedTypeSymbol destinationType,
            SemanticModel semanticModel)
        {
            INamedTypeSymbol list = semanticModel.Compilation.GetTypeByMetadataName("System.Collections.Generic.List`1");

            if (list != null && destinationType.ConstructedFrom == list)
            {
                INamedTypeSymbol enumerable = semanticModel.Compilation.GetTypeByMetadataName("System.Linq.Enumerable");

                if (enumerable != null)
                {
                    AddToMethodInvocationRefactoring.ComputeRefactoring(context, expression, enumerable, "ToList");
                }
            }
        }
コード例 #2
0
        private static void AddToArray(
            RefactoringContext context,
            ExpressionSyntax expression,
            IArrayTypeSymbol arrayType,
            SemanticModel semanticModel)
        {
            ITypeSymbol expressionType = semanticModel.GetTypeInfo(expression, context.CancellationToken).Type;

            if (expressionType?.IsNamedType() == true)
            {
                INamedTypeSymbol constructedFrom = ((INamedTypeSymbol)expressionType).ConstructedFrom;

                if (constructedFrom.SpecialType == SpecialType.System_Collections_Generic_IEnumerable_T ||
                    constructedFrom.Implements(SpecialType.System_Collections_Generic_IEnumerable_T))
                {
                    INamedTypeSymbol enumerable = semanticModel.Compilation.GetTypeByMetadataName("System.Linq.Enumerable");

                    if (enumerable != null)
                    {
                        AddToMethodInvocationRefactoring.ComputeRefactoring(context, expression, enumerable, "ToArray");
                    }
                }
            }
        }
コード例 #3
0
        private static bool AddToMethodInvocation(
            RefactoringContext context,
            ExpressionSyntax expression,
            ITypeSymbol destinationType,
            SemanticModel semanticModel)
        {
            if (destinationType.IsString())
            {
                AddToMethodInvocationRefactoring.ComputeRefactoring(context, expression, destinationType, "ToString");
                return(true);
            }
            else if (destinationType.IsArrayType())
            {
                AddToArray(context, expression, (IArrayTypeSymbol)destinationType, semanticModel);
                return(true);
            }
            else if (destinationType.IsNamedType())
            {
                AddToList(context, expression, (INamedTypeSymbol)destinationType, semanticModel);
                return(true);
            }

            return(false);
        }