Continue() public static method

Creates a GotoExpression representing a continue statement.
public static Continue ( LabelTarget target ) : GotoExpression
target LabelTarget The that the will jump to.
return GotoExpression
Ejemplo n.º 1
0
        private GotoExpression GotoExpression(
            ExpressionType nodeType, System.Type type, JObject obj)
        {
            var value      = this.Expression(this.Prop(obj, "value"));
            var kind       = this.Enum <GotoExpressionKind>(this.Prop(obj, "kind"));
            var targetType = this.Type(this.Prop(obj, "targetType"));
            var targetName = this.Prop(obj, "targetName").Value <string>();

            switch (kind)
            {
            case GotoExpressionKind.Break:
                return(Expr.Break(CreateLabelTarget(targetName, targetType), value));

            case GotoExpressionKind.Continue:
                return(Expr.Continue(CreateLabelTarget(targetName, targetType)));

            case GotoExpressionKind.Goto:
                return(Expr.Goto(CreateLabelTarget(targetName, targetType), value));

            case GotoExpressionKind.Return:
                return(Expr.Return(CreateLabelTarget(targetName, targetType), value));

            default:
                throw new NotImplementedException();
            }
        }
Ejemplo n.º 2
0
 public static Expression <Func <TSource, TResult> > ResolveMemberInit <TSource, TResult, TSourceMember, TMember>(this Expression <Func <TSource, TResult> > init,
                                                                                                                  Expression <Func <TSource, ICollection <TSourceMember> > > sourceMember,
                                                                                                                  Expression <Func <TResult, IEnumerable <TMember> > > member)
     where TMember : ISelectExpression <TSourceMember, TMember>, new()
 {
     return(init.AddMemberInit(sourceMember.Continue(source => source.AsEnumerable()), member, Mapper.GetExpression <TSourceMember, TMember>()));
 }
Ejemplo n.º 3
0
        private static Expression <Func <TEnum, string> > GetFlagEnumToStringExpression <TEnum>(
            Dictionary <Enum, string> allMembers,
            Type enumType,
            Type enumExactType,
            Type enumUnderlyingType,
            Expression zeroConstant,
            Expression zeroStringExpression,
            Expression nullStringExpression,
            string delimiter)
        {
            ParameterExpression parameter = Expression.Parameter(enumType, enumExactType.Name.ToLower());
            int delimiterLength           = delimiter.Length;

            Expression <Func <string, string> > subStringExpression = enumResult => enumResult.Substring(delimiterLength, int.MaxValue);

            // Ex: gender => ((gender & Gender.Male) == Gender.Male?", Male":"") + ((gender & Gender.Female) == Gender.Female?", Female":"") + ...; Result: ", Male, Female ..."
            Expression <Func <TEnum, string> > allMembersToString = allMembers.Select(kvp =>
            {
                // (int)Gender.Male
                Expression compareVal = Expression.Convert(Expression.Constant(kvp.Key, enumExactType), enumUnderlyingType);
                // ", Male"
                ConstantExpression resultString = Expression.Constant(delimiter + kvp.Value, StringType);

                // (gender & Gender.Male) == Gender.Male
                Expression equalsExpression = Expression.Equal(Expression.And(Expression.Convert(parameter, enumUnderlyingType), compareVal), compareVal);
                // (gender & Gender.Male) == Gender.Male?", Male":""
                Expression enumToStringBody = Expression.Condition(equalsExpression, resultString, EmptyStringExpression);

                return(Expression.Lambda <Func <TEnum, string> >(enumToStringBody, parameter));
            })
                                                                    .Join((l, r) => String.Concat(l, r));

            // Ex: gender => (((gender & Gender.Male) == Gender.Male?", Male":"") + ((gender & Gender.Female) == Gender.Female?", Female":"") + ...).Substring(2); Result: "Male, Female ..."
            Expression <Func <TEnum, string> > notNullExpression = allMembersToString.Continue(subStringExpression);

            //Zero check
            Expression checkZeroBody = Expression.Condition(Expression.Equal(parameter, zeroConstant), zeroStringExpression, notNullExpression.Body);

            // Ex: gender => gender==0 ? "" : (((gender & Gender.Male) == Gender.Male?", Male":"") + ((gender & Gender.Female) == Gender.Female?", Female":"") + ...).Substring(2);
            notNullExpression = Expression.Lambda <Func <TEnum, string> >(checkZeroBody, notNullExpression.Parameters[0]);

            bool isNullable = enumType != enumExactType;

            if (isNullable)
            {
                // Ex: gender => gender==null ? null : (gender==0 ? "" : (((gender & Gender.Male) == Gender.Male?", Male":"") + ((gender & Gender.Female) == Gender.Female?", Female":"") + ...).Substring(2));
                ConstantExpression    nullEnumVal           = Expression.Constant(null, enumType);
                ConditionalExpression nullStringIfNullValue = Expression.Condition(Expression.Equal(parameter, nullEnumVal), nullStringExpression, notNullExpression.Body);

                return(Expression.Lambda <Func <TEnum, string> >(nullStringIfNullValue, parameter));
            }
            else
            {
                // Ex: gender => gender==0 ? "" : (((gender & Gender.Male) == Gender.Male?", Male":"") + ((gender & Gender.Female) == Gender.Female?", Female":"") + ...).Substring(2);
                return(notNullExpression);
            }
        }
 /// <summary>
 ///   Transform as expression (value is read).
 /// </summary>
 protected internal override MAst Transform()
 {
     return(MAst.Continue(_target));
 }