Как определить фактический тип результата выражения? [Дубликат]

Попробуйте следующее:

pd.set_option('display.expand_frame_repr', False)

Из документации:

display.expand_frame_repr: boolean

Вывести распечатку полного представления DataFrame для широких DataFrames в нескольких строках, max_columns по-прежнему соблюдается, но вывод будет охватывать несколько «страниц», если его ширина превышает display.width. [default: True] [в настоящее время: True]

См .: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html

11
задан Jeff Mercado 8 November 2011 в 20:40
поделиться

3 ответа

Что-то вроде этого может сделать трюк. Вероятно, это не распространяется на все возможности, но это начало.

public static Type GetObjectType<T>(Expression<Func<T, object>> expr)
{
    if ((expr.Body.NodeType == ExpressionType.Convert) ||
        (expr.Body.NodeType == ExpressionType.ConvertChecked))
    {
        var unary = expr.Body as UnaryExpression;
        if (unary != null)
            return unary.Operand.Type;
    }
    return expr.Body.Type;
}
20
ответ дан LukeH 5 September 2018 в 08:27
поделиться

Хотя это не невозможно, это особенно сложно. Это потребует ходьбы от дерева выражений и выполнения некоторой потенциально сложной логики. Например, что бы вы хотели увидеть, если я передал в следующем выражении?

Func<bool, object> expr = switch => switch ? 1 : "False";

Этот метод мог либо возвратить int, либо string.

Теперь вы можете добиться большего прогресса, разгрузив часть этой логики в компиляторе. Вы можете изменить свой параметр метода с Func<T, object> на Func<T, TReturn> и использовать typeof(TReturn) в этом методе, чтобы определить, что компилятор решил использовать тип возвращаемого выражения.

Конечно, в случае мой пример, вы все равно будете работать против object. Но ваш пример из x => x.IntegerProperty.ToString() даст string, и это то, что вы ищете.

2
ответ дан Adam Maras 5 September 2018 в 08:27
поделиться

Немного наглый способ (и он включает в себя фактически вызов Func), но вы можете это сделать:

using System;

class Program
{
    static Func<T,object> MakeFunc<T>()
    {
        return x => 23;
    }

    static Type GetReturnType<T>(Func<T,object> f)
    {
        return f(default(T)).GetType();
    }

    static void Main(string[] args)
    {
        Type t = GetReturnType(MakeFunc<string>());
        Console.WriteLine(t);
    }
}

Не гарантируется работа во всех ситуациях, я должен добавить - особенно если default(T) не является допустимым параметром для Func. Но, по крайней мере, это потенциальная отправная точка.

0
ответ дан Stuart Golodetz 5 September 2018 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: