public int[] GetDimensions(EnvDTE.Expression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            int[] dims;
            switch (GetExpressionType(expression))
            {
            case ExpressionType.Matrix:
                dims = new int[2];
                EnvDTE.Expressions members = expression.DataMembers.Item("Item").DataMembers;
                dims[0] = ParseDimension(members.Item("NumRows").Value);
                dims[1] = ParseDimension(members.Item("NumCols").Value);
                break;

            case ExpressionType.Vector:
                dims    = new int[1];
                dims[0] = expression.DataMembers.Count - 1;
                break;

            default:
                throw new NotSupportedException(string.Format("'{0} is not supported.'", expression.Type));
            }
            return(dims);
        }
        public int[] GetDimensions(EnvDTE.Expression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }

            ThreadHelper.ThrowIfNotOnUIThread();

            int[] dims;
            switch (GetExpressionType(expression))
            {
            case ExpressionType.Matrix:
                dims = new int[2];
                EnvDTE.Expressions members = expression.DataMembers.Item("Item").DataMembers;
                dims[0] = ParseDimension(members.Item("NumRows").Value);
                dims[1] = ParseDimension(members.Item("NumCols").Value);
                break;

            case ExpressionType.Vector:
                dims    = new int[1];
                dims[0] = expression.DataMembers.Count - 1;
                break;

            default:
                throw new NotSupportedException($"'{expression.Type} is not supported.'");
            }
            return(dims);
        }