Beispiel #1
0
        /// <summary> Evaluates 'new List&lt;T&gt;(iEnumerableValue)' in the debuggee. </summary>
        public static Value CreateListFromIEnumerable(ParameterizedType ienumerableType, Value iEnumerableValue)
        {
            var ilistDef  = ienumerableType.Compilation.FindType(typeof(List <>)).GetDefinition();
            var ilistType = new ParameterizedType(ilistDef, ienumerableType.TypeArguments);
            var ctors     = ilistType.GetConstructors(m => m.Parameters.Count == 1);
            var ctor      = ctors.Single(m => m.Parameters[0].Type.IsKnownType(KnownTypeCode.IEnumerableOfT));

            return(Eval.NewObject(WindowsDebugger.EvalThread, ctor, new Value[] { iEnumerableValue }));
        }
        /// <inheritdoc/>
        public override object Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
        {
            List <Value> args = new List <Value>();

            foreach (object arg in parameters)
            {
                args.Add((Value)arg);
            }
            if (this.IsSpecialName && this.Name == ".ctor")
            {
                if (obj != null)
                {
                    throw new GetValueException("'obj' must be null for constructor call");
                }
                return(Eval.NewObject(this, args.ToArray()));
            }
            else
            {
                return(Eval.InvokeMethod(this, (Value)obj, args.ToArray()));
            }
        }