/// <summary> /// Creates an expression which, when evaluated, creates a List<T> in the debugee /// filled with contents of IEnumerable<T> from the debugee. /// </summary> /// <param name="iEnumerableVariable">Expression for IEnumerable variable in the debugee.</param> /// <param name="itemType"> /// The generic argument of IEnumerable<T> that <paramref name="iEnumerableVariable"/> implements.</param> public static Expression CreateDebugListExpression(Expression iEnumerableVariable, DebugType itemType, out DebugType listType) { // is using itemType.AppDomain ok? listType = DebugType.CreateFromType(itemType.AppDomain, typeof(System.Collections.Generic.List<>), itemType); var iEnumerableType = DebugType.CreateFromType(itemType.AppDomain, typeof(IEnumerable<>), itemType); // explicitely cast the variable to IEnumerable<T>, where T is itemType Expression iEnumerableVariableExplicitCast = new CastExpression(iEnumerableType.GetTypeReference() , iEnumerableVariable, CastType.Cast); return new ObjectCreateExpression(listType.GetTypeReference(), iEnumerableVariableExplicitCast.ToList()); }
/// <summary> /// Creates an expression which, when evaluated, creates a List<T> in the debugee /// filled with contents of IEnumerable<T> from the debugee. /// </summary> /// <param name="iEnumerableVariable">Expression for IEnumerable variable in the debugee.</param> /// <param name="itemType"> /// The generic argument of IEnumerable<T> that <paramref name="iEnumerableVariable"/> implements.</param> public static Expression CreateDebugListExpression(Expression iEnumerableVariable, DebugType itemType, out DebugType listType) { // is using itemType.AppDomain ok? listType = DebugType.CreateFromType(itemType.AppDomain, typeof(System.Collections.Generic.List <>), itemType); var iEnumerableType = DebugType.CreateFromType(itemType.AppDomain, typeof(IEnumerable <>), itemType); // explicitely cast the variable to IEnumerable<T>, where T is itemType Expression iEnumerableVariableExplicitCast = new CastExpression(iEnumerableType.GetTypeReference(), iEnumerableVariable, CastType.Cast); return(new ObjectCreateExpression(listType.GetTypeReference(), iEnumerableVariableExplicitCast.ToList())); }
/// <summary> /// Creates an expression which, when evaluated, creates a List<T> in the debugee /// filled with contents of IEnumerable<T> from the debugee. /// </summary> /// <param name="iEnumerableVariable">Expression for IEnumerable variable in the debugee.</param> /// <param name="itemType"> /// The generic argument of IEnumerable<T> that <paramref name="iEnumerableVariable"/> implements.</param> public static Expression CreateDebugListExpression(Expression iEnumerableVariable, DebugType itemType, out DebugType listType) { // is using itemType.AppDomain ok? listType = DebugType.CreateFromType(itemType.AppDomain, typeof(System.Collections.Generic.List<>), itemType); var iEnumerableType = DebugType.CreateFromType(itemType.AppDomain, typeof(IEnumerable<>), itemType); // explicitely cast the variable to IEnumerable<T>, where T is itemType Expression iEnumerableVariableExplicitCast = new CastExpression { Expression = iEnumerableVariable.Clone() , Type = iEnumerableType.GetTypeReference() }; var obj = new ObjectCreateExpression() { Type = listType.GetTypeReference() }; obj.Arguments.Add(iEnumerableVariableExplicitCast); return obj; }
public static Expression CastTo(this Expression expresion, DebugType castTo) { // No need to cast if (expresion.GetStaticType() == castTo) { return(expresion); } if (expresion is PrimitiveExpression) { object val = ((PrimitiveExpression)expresion).Value; if (val != null && val.GetType().FullName == castTo.FullName) { return(expresion); } } return(new CastExpression(castTo.GetTypeReference(), expresion.Parenthesize(), CastType.Cast)); }
/// <summary> /// Creates an expression which, when evaluated, creates a List<T> in the debugee /// filled with contents of IEnumerable<T> from the debugee. /// </summary> /// <param name="iEnumerableVariable">Expression for IEnumerable variable in the debugee.</param> /// <param name="itemType"> /// The generic argument of IEnumerable<T> that <paramref name="iEnumerableVariable"/> implements.</param> public static Expression CreateDebugListExpression(Expression iEnumerableVariable, DebugType itemType, out DebugType listType) { // is using itemType.AppDomain ok? listType = DebugType.CreateFromType(itemType.AppDomain, typeof(System.Collections.Generic.List <>), itemType); var iEnumerableType = DebugType.CreateFromType(itemType.AppDomain, typeof(IEnumerable <>), itemType); // explicitely cast the variable to IEnumerable<T>, where T is itemType Expression iEnumerableVariableExplicitCast = new CastExpression { Expression = iEnumerableVariable.Clone(), Type = iEnumerableType.GetTypeReference() }; var obj = new ObjectCreateExpression() { Type = listType.GetTypeReference() }; obj.Arguments.Add(iEnumerableVariableExplicitCast); return(obj); }