本文整理匯總了C#中System.Workflow.Activities.Rules.RuleValidation.ResolveIndexerProperty方法的典型用法代碼示例。如果您正苦於以下問題:C# RuleValidation.ResolveIndexerProperty方法的具體用法?C# RuleValidation.ResolveIndexerProperty怎麽用?C# RuleValidation.ResolveIndexerProperty使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類System.Workflow.Activities.Rules.RuleValidation
的用法示例。
在下文中一共展示了RuleValidation.ResolveIndexerProperty方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: Validate
//.........這裏部分代碼省略.........
List<CodeExpression> argumentExprs = new List<CodeExpression>();
bool flag2 = false;
for (int i = 0; i < newParent.Indices.Count; i++)
{
CodeExpression expression4 = newParent.Indices[i];
if (expression4 == null)
{
item = new ValidationError(Messages.NullIndexExpression, 0x53d);
item.UserData["ErrorObject"] = newParent;
validation.Errors.Add(item);
flag2 = true;
}
else
{
CodeDirectionExpression expression5 = expression4 as CodeDirectionExpression;
if ((expression5 != null) && (expression5.Direction != FieldDirection.In))
{
item = new ValidationError(Messages.IndexerArgCannotBeRefOrOut, 0x19d);
item.UserData["ErrorObject"] = newParent;
validation.Errors.Add(item);
flag2 = true;
}
if (expression4 is CodeTypeReferenceExpression)
{
item = new ValidationError(string.Format(CultureInfo.CurrentCulture, Messages.CodeExpressionNotHandled, new object[] { expression4.GetType().FullName }), 0x548);
item.UserData["ErrorObject"] = expression4;
validation.AddError(item);
flag2 = true;
}
if (RuleExpressionWalker.Validate(validation, expression4, false) == null)
{
flag2 = true;
}
else
{
argumentExprs.Add(expression4);
}
}
}
if (expressionType == null)
{
return null;
}
if (flag2)
{
return null;
}
BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;
if (validation.AllowInternalMembers(expressionType))
{
bindingFlags |= BindingFlags.NonPublic;
nonPublic = true;
}
info = validation.ResolveIndexerProperty(expressionType, bindingFlags, argumentExprs, out item);
if (info == null)
{
item.UserData["ErrorObject"] = newParent;
validation.Errors.Add(item);
return null;
}
}
finally
{
validation.PopParentExpression();
}
PropertyInfo propertyInfo = info.PropertyInfo;
MethodInfo accessorMethod = isWritten ? propertyInfo.GetSetMethod(nonPublic) : propertyInfo.GetGetMethod(nonPublic);
if (accessorMethod == null)
{
string format = isWritten ? Messages.UnknownPropertySet : Messages.UnknownPropertyGet;
item = new ValidationError(string.Format(CultureInfo.CurrentCulture, format, new object[] { propertyInfo.Name, RuleDecompiler.DecompileType(expressionType) }), 0x54a);
item.UserData["ErrorObject"] = newParent;
validation.Errors.Add(item);
return null;
}
if (!validation.ValidateMemberAccess(targetObject, expressionType, accessorMethod, propertyInfo.Name, newParent))
{
return null;
}
object[] customAttributes = propertyInfo.GetCustomAttributes(typeof(RuleAttribute), true);
if ((customAttributes != null) && (customAttributes.Length > 0))
{
Stack<MemberInfo> stack = new Stack<MemberInfo>();
stack.Push(propertyInfo);
bool flag3 = true;
foreach (RuleAttribute attribute in customAttributes)
{
if (!attribute.Validate(validation, propertyInfo, expressionType, propertyInfo.GetIndexParameters()))
{
flag3 = false;
}
}
stack.Pop();
if (!flag3)
{
return null;
}
}
return info;
}
開發者ID:pritesh-mandowara-sp,項目名稱:DecompliedDotNetLibraries,代碼行數:101,代碼來源:IndexerPropertyExpression.cs
示例2: Validate
//.........這裏部分代碼省略.........
validation.Errors.Add(error);
hasInvalidArgument = true;
}
else
{
CodeDirectionExpression argDirection = argExpr as CodeDirectionExpression;
if (argDirection != null && argDirection.Direction != FieldDirection.In)
{
// No "ref" or "out" arguments are allowed on indexer arguments.
error = new ValidationError(Messages.IndexerArgCannotBeRefOrOut, ErrorNumbers.Error_IndexerArgCannotBeRefOrOut);
error.UserData[RuleUserDataKeys.ErrorObject] = indexerExpr;
validation.Errors.Add(error);
hasInvalidArgument = true;
}
if (argExpr is CodeTypeReferenceExpression)
{
message = string.Format(CultureInfo.CurrentCulture, Messages.CodeExpressionNotHandled, argExpr.GetType().FullName);
error = new ValidationError(message, ErrorNumbers.Error_CodeExpressionNotHandled);
error.UserData[RuleUserDataKeys.ErrorObject] = argExpr;
validation.AddError(error);
hasInvalidArgument = true;
}
// Validate the argument.
RuleExpressionInfo argExprInfo = RuleExpressionWalker.Validate(validation, argExpr, false);
if (argExprInfo == null)
hasInvalidArgument = true;
else
argExprs.Add(argExpr);
}
}
// Stop further validation if there was a problem with the target expression.
if (targetType == null)
return null;
// Stop further validation if there was a problem with any of the arguments.
if (hasInvalidArgument)
return null;
BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;
if (validation.AllowInternalMembers(targetType))
{
bindingFlags |= BindingFlags.NonPublic;
includeNonPublic = true;
}
// Everything okay so far, try to resolve the method.
propExprInfo = validation.ResolveIndexerProperty(targetType, bindingFlags, argExprs, out error);
if (propExprInfo == null)
{
error.UserData[RuleUserDataKeys.ErrorObject] = indexerExpr;
validation.Errors.Add(error);
return null;
}
}
finally
{
validation.PopParentExpression();
}
PropertyInfo pi = propExprInfo.PropertyInfo;
MethodInfo accessorMethod = isWritten ? pi.GetSetMethod(includeNonPublic) : pi.GetGetMethod(includeNonPublic);
if (accessorMethod == null)
{
string baseMessage = isWritten ? Messages.UnknownPropertySet : Messages.UnknownPropertyGet;
message = string.Format(CultureInfo.CurrentCulture, baseMessage, pi.Name, RuleDecompiler.DecompileType(targetType));
error = new ValidationError(message, ErrorNumbers.Error_CannotResolveMember);
error.UserData[RuleUserDataKeys.ErrorObject] = indexerExpr;
validation.Errors.Add(error);
return null;
}
if (!validation.ValidateMemberAccess(targetObject, targetType, accessorMethod, pi.Name, indexerExpr))
return null;
// Validate any RuleAttributes, if present.
object[] attrs = pi.GetCustomAttributes(typeof(RuleAttribute), true);
if (attrs != null && attrs.Length > 0)
{
Stack<MemberInfo> methodStack = new Stack<MemberInfo>();
methodStack.Push(pi);
bool allAttributesValid = true;
foreach (RuleAttribute ruleAttr in attrs)
{
if (!ruleAttr.Validate(validation, pi, targetType, pi.GetIndexParameters()))
allAttributesValid = false;
}
methodStack.Pop();
if (!allAttributesValid)
return null;
}
return propExprInfo;
}