예제 #1
0
        internal static void AddNames(Expression expression, NameBuilder nb)
        {
            if (expression == null)
            {
                return;
            }

            switch (expression.NodeType)
            {
            case ExpressionType.MemberAccess:
                var memberExpression = (MemberExpression)expression;
                AddNames(memberExpression.Expression, nb);
                if (nb.DotNeeded)
                {
                    nb.Append(".");
                }
                nb.Append(memberExpression.Member.Name);
                break;

            //case ExpressionType.Convert:
            //    var unaryExpression = (UnaryExpression)expression;
            //    AddNames(unaryExpression.Operand, nb);
            //    break;

            case ExpressionType.Call:
                var        callExpression = (MethodCallExpression)expression;
                MethodInfo method         = callExpression.Method;
                bool       isIndexer      = (method.Name == "get_Item" && method.IsSpecialName);
                if (!isIndexer)
                {
                    goto default;
                }

                AddNames(callExpression.Object, nb);
                nb.Append("[" + GetArguments(callExpression.Arguments).Aggregate((a, b) => a + b) + "]");
                break;

            case ExpressionType.Parameter:
                break;

            default:
                throw new InvalidOperationException(
                          string.Format("Unsupported expression type \"{0}\" in named expression",
                                        Enum.GetName(typeof(ExpressionType), expression.NodeType)));
            }
        }
예제 #2
0
        protected List <string> GetLocalAccounts(int countAccounts)
        {
            var result   = new List <string>();
            var alphabet = "abcdefghijklmnopqrstuvwxyz";

            for (int i = 0; i < countAccounts; i++)
            {
                NameBuilder.Clear();
                for (var j = 0; j < 6; j++)
                {
                    NameBuilder.Append(alphabet[Random.Next(26)]);
                }
                result.Add($"{NameBuilder}@ageron.info");
            }
            return(result);
        }
예제 #3
0
        public void ProcessToken()
        {
            Content.Append(";");

            bool parsingString  = false;
            bool parseName      = false;
            bool parseAttribute = false;

            for (int i = 0; i < Content.Length - 1; i++)
            {
                char c  = Content[i];
                char c1 = Content[i + 1];
                if (c == '"')
                {
                    parsingString = !parsingString;
                }

                if (!parsingString && (c == '<' || c == '/') && char.IsLetter(c1))
                {
                    parseName = true;
                }

                if (parseName)
                {
                    if (c == ' ')
                    {
                        parseAttribute = true;
                    }
                    if (parseAttribute)
                    {
                        AttributeBuilder.Append(c);
                    }
                    else
                    {
                        if (!parsingString && c == '/' || c == '<' || c == '>')
                        {
                            continue;
                        }
                        NameBuilder.Append(c);
                    }
                }
            }
        }