internal void Validate(Activity owner, ref IList <ValidationError> validationErrors) { if (this.Expression != null) { if (this.Expression.Result != null && !this.Expression.Result.IsEmpty) { ValidationError validationError = new ValidationError(SR.ResultCannotBeSetOnArgumentExpressions, false, this.RuntimeArgument.Name, owner); ActivityUtilities.Add(ref validationErrors, validationError); } ActivityWithResult actualExpression = this.Expression; if (actualExpression is IExpressionWrapper) { actualExpression = ((IExpressionWrapper)actualExpression).InnerExpression; } switch (this.Direction) { case ArgumentDirection.In: if (actualExpression.ResultType != this.ArgumentType) { ActivityUtilities.Add( ref validationErrors, new ValidationError(SR.ArgumentValueExpressionTypeMismatch(this.ArgumentType, actualExpression.ResultType), false, this.RuntimeArgument.Name, owner)); } break; case ArgumentDirection.InOut: case ArgumentDirection.Out: Type locationType; if (!ActivityUtilities.IsLocationGenericType(actualExpression.ResultType, out locationType) || locationType != this.ArgumentType) { Type expectedType = ActivityUtilities.CreateActivityWithResult(ActivityUtilities.CreateLocation(this.ArgumentType)); ActivityUtilities.Add( ref validationErrors, new ValidationError(SR.ArgumentLocationExpressionTypeMismatch(expectedType.FullName, actualExpression.GetType().FullName), false, this.RuntimeArgument.Name, owner)); } break; } } }
internal void Validate(Activity owner, ref IList <ValidationError> validationErrors) { if (this.Expression != null) { if ((this.Expression.Result != null) && !this.Expression.Result.IsEmpty) { ValidationError data = new ValidationError(System.Activities.SR.ResultCannotBeSetOnArgumentExpressions, false, this.RuntimeArgument.Name, owner); ActivityUtilities.Add <ValidationError>(ref validationErrors, data); } ActivityWithResult expression = this.Expression; if (expression is IExpressionWrapper) { expression = ((IExpressionWrapper)expression).InnerExpression; } switch (this.Direction) { case ArgumentDirection.In: if (!(expression.ResultType != this.ArgumentType)) { break; } ActivityUtilities.Add <ValidationError>(ref validationErrors, new ValidationError(System.Activities.SR.ArgumentValueExpressionTypeMismatch(this.ArgumentType, expression.ResultType), false, this.RuntimeArgument.Name, owner)); return; case ArgumentDirection.Out: case ArgumentDirection.InOut: Type type; if (!ActivityUtilities.IsLocationGenericType(expression.ResultType, out type) || (type != this.ArgumentType)) { Type type2 = ActivityUtilities.CreateActivityWithResult(ActivityUtilities.CreateLocation(this.ArgumentType)); ActivityUtilities.Add <ValidationError>(ref validationErrors, new ValidationError(System.Activities.SR.ArgumentLocationExpressionTypeMismatch(type2.FullName, expression.GetType().FullName), false, this.RuntimeArgument.Name, owner)); } break; default: return; } } }