• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C# SwitchStatementSyntax类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C#中SwitchStatementSyntax的典型用法代码示例。如果您正苦于以下问题:C# SwitchStatementSyntax类的具体用法?C# SwitchStatementSyntax怎么用?C# SwitchStatementSyntax使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



SwitchStatementSyntax类属于命名空间,在下文中一共展示了SwitchStatementSyntax类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。

示例1: BoundSwitchStatement

 public BoundSwitchStatement(BoundExpression boundCondition, List<BoundCase> boundCases, BoundElse boundElse, SwitchStatementSyntax syntax)
     : base(syntax)
 {
     BoundCondition = boundCondition;
     BoundCases = boundCases;
     BoundElse = boundElse;
 }
开发者ID:lawl-dev,项目名称:Kiwi,代码行数:7,代码来源:BoundSwitchStatement.cs


示例2: VisitSwitchStatement

 public override SyntaxNode VisitSwitchStatement(SwitchStatementSyntax node)
 {
     var section = node.Sections.FirstOrDefault();
     if (section != null)
     {
         if (_isExpressionTransformer)
         {
             _isExpressionTransformer = false;
             Visit(section);
             if (_transform)
             {
                 _isExpressionTransformer = false;
                 _transform = false;
                 return node.AddSections(
                     Syntax.SwitchSection(
                         Syntax.List(
                             Syntax.SwitchLabel(
                                 SyntaxKind.CaseSwitchLabel,
                                 Syntax.ParseExpression(string.Concat("\"", _expressionTransformerNamespaceDot, _edmxName, "ClientContext\"")))),
                         Syntax.List(
                             Syntax.ParseStatement(string.Concat("return new ", _expressionTransformerNamespaceDot, _edmxName, @"ExpressionTransformer().TransformExpression(expression, contextName);")))));
             }
         }
     }
     return base.VisitSwitchStatement(node);
 }
开发者ID:bnjMichel,项目名称:waqs,代码行数:26,代码来源:ExpressionTransformerRewriter.cs


示例3: GetMissingEnumMembers

        //--- Class Methods ---
        public static IEnumerable<ISymbol> GetMissingEnumMembers(SwitchStatementSyntax switchNode, SemanticModel semanticModel, out IdentifierNameSyntax switchVariable)
        {
            // TODO (2016-02-25, steveb): what if the swich calls a function instead?
            switchVariable = switchNode.Expression as IdentifierNameSyntax;
            if(switchVariable == null) {
                return Enumerable.Empty<ISymbol>();
            }
            var switchVariableTypeInfo = semanticModel.GetTypeInfo(switchVariable);

            // check if we are switching over an enum
            if((switchVariableTypeInfo.Type != null) && (switchVariableTypeInfo.Type.TypeKind == TypeKind.Enum)) {

                // get all the enum values
                var enumMembers = switchVariableTypeInfo.Type.GetMembers().Where(x => x.Kind == SymbolKind.Field).ToImmutableArray();

                // get all case statements
                var caseSwitchLabels = switchNode.Sections
                    .SelectMany(section => section.Labels)
                    .Select(label => label.DescendantNodes().OfType<MemberAccessExpressionSyntax>().FirstOrDefault())
                    .Where(memberAccess => memberAccess != null)
                    .Select(memberAccess => semanticModel.GetSymbolInfo(memberAccess).Symbol)
                    .ToImmutableHashSet();

                // make sure we have all cases covered
                return enumMembers.Where(x => !caseSwitchLabels.Contains(x)).ToImmutableArray();
            }
            return Enumerable.Empty<ISymbol>();
        }
开发者ID:MindTouch,项目名称:MindTouchRoslynAnalyzers,代码行数:29,代码来源:EnumSwitchAnalysis.cs


示例4: SwitchStatement

        public static string SwitchStatement(SwitchStatementSyntax statement)
        {
            var output = "switch ";
            output += SyntaxNode(statement.Expression) + " {" + NewLine;

            output = statement.Sections.Aggregate(output, (current, sect) => current + SyntaxNode(sect));

            return output + "}" + NewLine;
        }
开发者ID:UIKit0,项目名称:SharpSwift,代码行数:9,代码来源:LogicSyntaxParser.cs


示例5: BindSwitchStatement

        private BoundStatement BindSwitchStatement(SwitchStatementSyntax syntax, Symbol parent)
        {
            BindAttributes(syntax.Attributes);

            var switchBinder = new Binder(_sharedBinderState, this);
            var boundSections = syntax.Sections.Select(x => switchBinder.Bind(x, y => switchBinder.BindSwitchSection(y, parent))).ToImmutableArray();

            return new BoundSwitchStatement(
                Bind(syntax.Expression, BindExpression),
                boundSections);
        }
开发者ID:Samana,项目名称:HlslTools,代码行数:11,代码来源:Binder.Statements.cs


示例6: HasPatternSwitchSyntax

        private static bool HasPatternSwitchSyntax(SwitchStatementSyntax switchSyntax)
        {
            foreach (var section in switchSyntax.Sections)
            {
                if (section.Labels.Any(SyntaxKind.CasePatternSwitchLabel))
                {
                    return true;
                }
            }

            return false;
        }
开发者ID:XieShuquan,项目名称:roslyn,代码行数:12,代码来源:PatternSwitchBinder.cs


示例7: DefaultSectionThrows

        private bool DefaultSectionThrows(SwitchStatementSyntax switchStatement, SemanticModel semanticModel)
        {
            var defaultCase = switchStatement.Sections.FirstOrDefault(s => s.Labels.OfType<DefaultSwitchLabelSyntax>().Any());

            if (defaultCase == null)
            {
                return false;
            }

            bool throwsInvalidOperation =
                defaultCase.Statements
                    // Filtering throw
                    .OfType<ThrowStatementSyntax>()
                    .Select(s => s.Expression)
                    // Filtering throw new Exception
                    .OfType<ObjectCreationExpressionSyntax>()
                    // Filtering unknown symbols
                    .Select(s => semanticModel.GetSymbolInfo(s.Type).Symbol)
                    .Where(s => s != null)
                    // True, if throw new InvalidOperationException()
                    .Any(s => s.Equals(semanticModel.GetClrType(typeof(InvalidOperationException))));

            if (throwsInvalidOperation)
            {
                return true;
            }

            bool hasContractAssertOrAssumeWithFalse =
                defaultCase.Statements
                    // Getting only expressions
                    .OfType<ExpressionStatementSyntax>()
                    // that calls functions
                    .Select(s => s.Expression as InvocationExpressionSyntax)
                    .Where(s => s != null)
                    // with first argument equals to false
                    .Where(s =>
                            s.ArgumentList.Arguments.FirstOrDefault()?.Expression?.Kind() == SyntaxKind.FalseLiteralExpression)
                    // with known symbols
                    .Select(s => semanticModel.GetSymbolInfo(s).Symbol as IMethodSymbol)
                    .Where(s => s != null)
                    // Contract.Assert/Assume or Debug.Assert
                    .Any(m => (m.ContainingType.Equals(semanticModel.GetClrType(typeof(Contract))) &&
                               (m.Name == "Assert" || m.Name == "Assume")) ||
                              (m.ContainingType.Name == "Debug" && m.Name == "Assert"));

            if (hasContractAssertOrAssumeWithFalse)
            {
                return true;
            }

            return false;
        }
开发者ID:SergeyTeplyakov,项目名称:ErrorProne.NET,代码行数:52,代码来源:MissingCasesInSwitchStatementAnalyzer.cs


示例8: Create

 internal static SwitchBinder Create(Binder next, SwitchStatementSyntax switchSyntax)
 {
     var parseOptions = switchSyntax?.SyntaxTree?.Options as CSharpParseOptions;
     return
         // In C# 6 and earlier, we use the old binder. In C# 7 and later, we use the new binder which
         // is capable of binding both the old and new syntax. However, the new binder does not yet
         // lead to a translation that fully supports edit-and-continue, so it delegates to the C# 6
         // binder when it can. The "typeswitch" feature flag forces the use of the C# 7 switch binder
         // for all operations; we use it to enhance test coverage.
         (parseOptions?.IsFeatureEnabled(MessageID.IDS_FeaturePatternMatching) != false || parseOptions?.Features.ContainsKey("typeswitch") != false)
         ? new PatternSwitchBinder(next, switchSyntax)
         : new SwitchBinder(next, switchSyntax);
 }
开发者ID:vslsnap,项目名称:roslyn,代码行数:13,代码来源:SwitchBinder.cs


示例9: ExplodeSwitch

		private async Task<Document> ExplodeSwitch(Document document, 
			SyntaxNode root, 
			SemanticModel semanticModel, 
			SwitchStatementSyntax node, 
			CancellationToken cancellationToken)
		{
			var switchRewriter = new SwitchSyntaxRewriter(semanticModel);
			var newNode = switchRewriter.VisitSwitchStatement(node);

			root = root.ReplaceNode(node, newNode);
			document = document.WithSyntaxRoot(root);

			return await Formatter.FormatAsync(document, null, cancellationToken).ConfigureAwait(false);
		}
开发者ID:Zache,项目名称:SwitchExploder,代码行数:14,代码来源:CodeRefactoringProvider.cs


示例10: SwitchAnalyzer

        public SwitchAnalyzer(SwitchStatementSyntax switchStatement, SemanticModel semanticModel)
        {
            // Hm...! It seems that Code Contracts still has a bug, and uncommenting Contract.Requires lead to NRE!
            //Contract.Requires(switchStatement != null);
            //Contract.Requires(semanticModel != null);

            _switchStatement = switchStatement;
            _semanticModel = semanticModel;

            var expressionSymbol = semanticModel.GetSymbolInfo(switchStatement.Expression).Symbol;
            _expressionType = LazyEx.Create(() => GetSymbolType(expressionSymbol));
            _switchOverEnum = LazyEx.Create(() => _expressionType.Value.IsEnum());
            _enumValues = LazyEx.Create(() => _expressionType.Value.GetSortedEnumFieldsAndValues().ToImmutableList());
            _cases = LazyEx.Create(() => GetUsedCases().ToImmutableList());
        }
开发者ID:SergeyTeplyakov,项目名称:ErrorProne.NET,代码行数:15,代码来源:SwitchAnalyzer.cs


示例11: BindSwitchExpressionAndSections

        internal override BoundStatement BindSwitchExpressionAndSections(SwitchStatementSyntax node, Binder originalBinder, DiagnosticBag diagnostics)
        {
            // If it is a valid C# 6 switch statement, we use the old binder to bind it.
            if (!UseV7SwitchBinder) return base.BindSwitchExpressionAndSections(node, originalBinder, diagnostics);

            Debug.Assert(SwitchSyntax.Equals(node));

            // Bind switch expression and set the switch governing type.
            var boundSwitchExpression = SwitchGoverningExpression;
            diagnostics.AddRange(SwitchGoverningDiagnostics);

            BoundPatternSwitchLabel defaultLabel;
            ImmutableArray<BoundPatternSwitchSection> switchSections = BindPatternSwitchSections(boundSwitchExpression, node.Sections, originalBinder, out defaultLabel, diagnostics);
            var locals = GetDeclaredLocalsForScope(node);
            var functions = GetDeclaredLocalFunctionsForScope(node);
            return new BoundPatternSwitchStatement(
                node, boundSwitchExpression,
                locals, functions, switchSections, defaultLabel, this.BreakLabel, this);
        }
开发者ID:Rickinio,项目名称:roslyn,代码行数:19,代码来源:SwitchBinder_BindPatternSwitch.cs


示例12: GetCaseLabels

        public static List<ExpressionSyntax> GetCaseLabels(SwitchStatementSyntax switchStatement, out bool containsDefaultLabel)
        {
            containsDefaultLabel = false;

            var caseLabels = new List<ExpressionSyntax>();
            foreach (var section in switchStatement.Sections)
            {
                foreach (var label in section.Labels)
                {
                    var caseLabel = label as CaseSwitchLabelSyntax;
                    if (caseLabel != null)
                    {
                        caseLabels.Add(caseLabel.Value);
                    }

                    if (label.IsKind(SyntaxKind.DefaultSwitchLabel))
                    {
                        containsDefaultLabel = true;
                    }
                }
            }

            return caseLabels;
        }
开发者ID:Eyas,项目名称:roslyn,代码行数:24,代码来源:CSharpPopulateSwitchHelpers.cs


示例13: BindSwitchExpressionAndSections

 internal virtual BoundSwitchStatement BindSwitchExpressionAndSections(SwitchStatementSyntax node, Binder originalBinder, DiagnosticBag diagnostics)
 {
     return this.Next.BindSwitchExpressionAndSections(node, originalBinder, diagnostics);
 }
开发者ID:elemk0vv,项目名称:roslyn-1,代码行数:4,代码来源:Binder_Statements.cs


示例14: HasAtLeastThreeLabels

 private static bool HasAtLeastThreeLabels(SwitchStatementSyntax node)
 {
     return node.Sections.Sum(section => section.Labels.Count) >= 3;
 }
开发者ID:roel4ez,项目名称:sonarlint-vs,代码行数:4,代码来源:SwitchCasesMinimumThree.cs


示例15: BindSwitchExpressionAndSections

        internal override BoundStatement BindSwitchExpressionAndSections(SwitchStatementSyntax node, Binder originalBinder, DiagnosticBag diagnostics)
        {
            Debug.Assert(SwitchSyntax.Equals(node));

            // Bind switch expression and set the switch governing type.
            var boundSwitchExpression = this.SwitchGoverningExpression;
            diagnostics.AddRange(this.SwitchGoverningDiagnostics);

            // Switch expression might be a constant expression.
            // For this scenario we can determine the target label of the switch statement
            // at compile time.            
            LabelSymbol constantTargetOpt = null;
            var constantValue = boundSwitchExpression.ConstantValue;
            if (constantValue != null)
            {
                constantTargetOpt = BindConstantJumpTarget(constantValue, node);
            }
            else if (!node.Sections.Any())
            {
                // empty switch block, set the break label as target
                constantTargetOpt = this.BreakLabel;
            }

            // Bind switch section
            ImmutableArray<BoundSwitchSection> boundSwitchSections = BindSwitchSections(node.Sections, originalBinder, diagnostics);

            return new BoundSwitchStatement(node, null, boundSwitchExpression, constantTargetOpt, 
                                            GetDeclaredLocalsForScope(node), 
                                            GetDeclaredLocalFunctionsForScope(node), boundSwitchSections, this.BreakLabel, null);
        }
开发者ID:vslsnap,项目名称:roslyn,代码行数:30,代码来源:SwitchBinder.cs


示例16: BindSwitchStatement

 public BoundSwitchStatement BindSwitchStatement(SwitchStatementSyntax node, DiagnosticBag diagnostics)
 {
     Debug.Assert(node != null);
     Binder switchBinder = this.GetBinder(node);
     return switchBinder.BindSwitchExpressionAndSections(node, switchBinder, diagnostics);
 }
开发者ID:elemk0vv,项目名称:roslyn-1,代码行数:6,代码来源:Binder_Statements.cs


示例17: SwitchBinder

 protected SwitchBinder(Binder next, SwitchStatementSyntax switchSyntax)
     : base(next)
 {
     SwitchSyntax = switchSyntax;
     _breakLabel = new GeneratedLabelSymbol("break");
 }
开发者ID:vslsnap,项目名称:roslyn,代码行数:6,代码来源:SwitchBinder.cs


示例18: InferTypeInSwitchStatement

            private IEnumerable<ITypeSymbol> InferTypeInSwitchStatement(
                SwitchStatementSyntax switchStatement, SyntaxToken? previousToken = null)
            {
                // If we have a position, then it has to be after "switch("
                if (previousToken.HasValue && previousToken.Value != switchStatement.OpenParenToken)
                {
                    return SpecializedCollections.EmptyEnumerable<ITypeSymbol>();
                }

                // Use the first case label to determine the return type.
                var firstCase =
                    switchStatement.Sections.SelectMany(ss => ss.Labels)
                                                  .FirstOrDefault(label => label.CSharpKind() == SyntaxKind.CaseSwitchLabel)
                                                  as CaseSwitchLabelSyntax;
                if (firstCase != null)
                {
                    var result = GetTypes(firstCase.Value);
                    if (result.Any())
                    {
                        return result;
                    }
                }

                return SpecializedCollections.SingletonEnumerable(this.Compilation.GetSpecialType(SpecialType.System_Int32));
            }
开发者ID:jerriclynsjohn,项目名称:roslyn,代码行数:25,代码来源:CSharpTypeInferenceService.TypeInferrer.cs


示例19: PatternSwitchBinder

 internal PatternSwitchBinder(Binder next, SwitchStatementSyntax switchSyntax) : base(next, switchSyntax)
 {
 }
开发者ID:XieShuquan,项目名称:roslyn,代码行数:3,代码来源:PatternSwitchBinder.cs


示例20: BindSwitchExpressionAndSections

        internal override BoundStatement BindSwitchExpressionAndSections(SwitchStatementSyntax node, Binder originalBinder, DiagnosticBag diagnostics)
        {
            Debug.Assert(_switchSyntax.Equals(node));

            if (IsPatternSwitch(node))
            {
                _isPatternSwitch = true;
                return PatternsEnabled
                    ? (BoundStatement)BindPatternSwitch(node, originalBinder, diagnostics)
                    : new BoundBlock(node, ImmutableArray<LocalSymbol>.Empty, ImmutableArray<LocalFunctionSymbol>.Empty, ImmutableArray<BoundStatement>.Empty, true);
            }

            // Bind switch expression and set the switch governing type. If it isn't valid as a traditional
            // switch statement's controlling expression, try to bind it as a pattern-matching switch statement
            var localDiagnostics = DiagnosticBag.GetInstance();
            var boundSwitchExpression = BindSwitchExpressionAndGoverningType(node.Expression, originalBinder, localDiagnostics);
            if (localDiagnostics.HasAnyResolvedErrors() && PatternsEnabled)
            {
                _isPatternSwitch = true;
                return BindPatternSwitch(node, originalBinder, diagnostics);
            }
            _isPatternSwitch = false;
            diagnostics.AddRangeAndFree(localDiagnostics);

            // Switch expression might be a constant expression.
            // For this scenario we can determine the target label of the switch statement
            // at compile time.            
            LabelSymbol constantTargetOpt = null;
            var constantValue = boundSwitchExpression.ConstantValue;
            if (constantValue != null)
            {
                constantTargetOpt = BindConstantJumpTarget(constantValue);
            }
            else if (!node.Sections.Any())
            {
                // empty switch block, set the break label as target
                constantTargetOpt = this.BreakLabel;
            }

            // Bind switch section
            ImmutableArray<BoundSwitchSection> boundSwitchSections = BindSwitchSections(node.Sections, originalBinder, diagnostics);

            return new BoundSwitchStatement(node, null, boundSwitchExpression, constantTargetOpt, 
                                            GetDeclaredLocalsForScope(node), 
                                            GetDeclaredLocalFunctionsForScope(node), boundSwitchSections, this.BreakLabel, null);
        }
开发者ID:RoryVL,项目名称:roslyn,代码行数:46,代码来源:SwitchBinder.cs



注:本文中的SwitchStatementSyntax类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# Sybase类代码示例发布时间:2022-05-24
下一篇:
C# SwitchStatement类代码示例发布时间:2022-05-24
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap