当前位置: 首页>>代码示例>>C#>>正文


C# ParameterSet.Where方法代码示例

本文整理汇总了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)));

//.........这里部分代码省略.........
开发者ID:redoz,项目名称:LBi.Cli.Arguments,代码行数:101,代码来源:ParameterSetBinder.cs


注:本文中的ParameterSet.Where方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。