@Override
    public Void visitTraversalMethod_hasLabel_String_String(final GremlinParser.TraversalMethod_hasLabel_String_StringContext ctx) {
        // if there is only one argument then cast to string otherwise it's ambiguous with hasLabel(P)
        if (ctx.stringNullableArgumentVarargs() == null || ctx.stringNullableArgumentVarargs().getChildCount() == 0) {
            final String step = ctx.getChild(0).getText();
            sb.append(convertToPascalCase(step));
            sb.append("(");
            tryAppendCastToString(ctx.stringNullableArgument());
            visit(ctx.stringNullableArgument());
            sb.append(")");
            return null;
        } else {
            final String step = ctx.getChild(0).getText();
            sb.append(convertToPascalCase(step));
            sb.append("(");
            tryAppendCastToString(ctx.stringNullableArgument());
            visit(ctx.stringNullableArgument());

            // more arguments to come
            if (!ctx.stringNullableArgumentVarargs().stringNullableArgument().isEmpty()) {
                ctx.stringNullableArgumentVarargs().stringNullableArgument().forEach(sna -> {
                    sb.append(", ");
                    tryAppendCastToString(sna);
                    visit(sna);
                });
            }

            sb.append(")");
            return null;
        }
    }
Converts a Gremlin traversal string into a C# source code representation of that traversal with an aim at
sacrificing some formatting for the ability to compile correctly.
<ul>
    <li>Range syntax has no direct support</li>
    <li>Normalizes whitespace</li>
    <li>Normalize numeric suffixes to lower case</li>
    <li>If floats are not suffixed they will translate as BigDecimal</li>
    <li>Makes anonymous traversals explicit with double underscore</li>
    <li>Makes enums explicit with their proper name</li>
</ul>
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java