本文整理汇总了C#中ParameterSet.Where方法的典型用法代码示例。如果您正苦于以下问题:C# ParameterSet.Where方法的具体用法?C# ParameterSet.Where怎么用?C# ParameterSet.Where使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ParameterSet
的用法示例。
在下文中一共展示了ParameterSet.Where方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Build
public virtual ParameterSetResult Build(ITypeActivator typeActivator,
ITypeConverter typeConverter,
CultureInfo cultureInfo,
NodeSequence sequence,
ParameterSet paramSet)
{
BuildContext ctx = new BuildContext(sequence,
paramSet,
typeActivator.CreateInstance(paramSet.UnderlyingType));
var requiredParameters = new HashSet<Parameter>(paramSet.Where(p => p.GetAttribute<RequiredAttribute>() != null));
SetDefaultValues(typeConverter, cultureInfo, ctx);
bool first = true;
using (IEnumerator<AstNode> enumerator = sequence.GetEnumerator())
{
while (enumerator.MoveNext())
{
if (first && !string.IsNullOrEmpty(ctx.ParameterSet.Command))
{
LiteralValue literal = enumerator.Current as LiteralValue;
if (literal == null || !StringComparer.InvariantCultureIgnoreCase.Equals(literal.Value, ctx.ParameterSet.Command))
{
// report error: missing/incorrect command
ctx.Errors.Add(new BindError(ErrorType.MissingCommand,
Enumerable.Empty<Parameter>(),
new AstNode[] { literal },
string.Format(ErrorMessages.MissingCommand, ctx.ParameterSet.Command)));
}
if (!enumerator.MoveNext())
break;
}
first = false;
if (enumerator.Current.Type == NodeType.Parameter || enumerator.Current.Type == NodeType.Switch)
{
ParameterName parameterName = (ParameterName)enumerator.Current;
Parameter[] parameters;
if (ctx.ParameterSet.TryGetParameter(parameterName.Name, out parameters) && parameters.Length == 1)
{
// remove from "remaining parameters" collection
if (!ctx.RemainingParameters.Remove(parameters[0]))
{
// report error, multiple bindings
string message = string.Format(ErrorMessages.MultipleBindings,
parameterName.Name);
ctx.Errors.Add(new BindError(ErrorType.MultipleBindings,
parameters,
new AstNode[] { parameterName },
message));
// if the parameter was not of type Switch, skip next node
if (parameters[0].Property.PropertyType != typeof(Switch))
enumerator.MoveNext();
// handled, continue and skip
continue;
}
// if it's a Switch we can simply set it to "Present"
if (parameters[0].Property.PropertyType == typeof(Switch))
{
if (enumerator.Current.Type == NodeType.Switch)
{
SwitchParameter switchParameter = (SwitchParameter)enumerator.Current;
SetPropertyValue(ctx, parameters[0], switchParameter.Value);
}
else
parameters[0].Property.SetValue(ctx.Instance, Switch.Present, null);
requiredParameters.Remove(parameters[0]);
// handled, continue and skip
continue;
}
// advance to value
if (!enumerator.MoveNext())
{
string message = string.Format(ErrorMessages.MissingValue, parameters[0].Name);
ctx.Errors.Add(new BindError(ErrorType.MissingValue,
new[] { parameters[0] },
new[] { parameterName },
message));
break;
}
SetPropertyValue(ctx, parameters[0], enumerator.Current);
requiredParameters.Remove(parameters[0]);
}
else if (parameters != null && parameters.Length > 1)
{
// report error, ambigious name
string message = string.Format(ErrorMessages.AmbigiousName,
parameterName.Name,
string.Join(", ", parameters.Select(p => p.Name)));
//.........这里部分代码省略.........