本文整理汇总了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;未经允许,请勿转载。 |
请发表评论