Перечисление C # на Expression.ToString () - PullRequest
4 голосов
/ 10 сентября 2009

Когда я вызываю методы ToString () для выражения, значение перечисления выводится как целое число. Есть ли какая-то перегрузка формата?

Может быть, я смогу создать класс dervied из выражения и переопределить некоторый метод ToString. Есть мысли?

Вот образец:

    public enum LengthUnits { METRES, FEET };

    Expression<Func<LengthUnits, bool>> isFeet = l => l == LengthUnits.FEET;
    string isFeetFunctinoAsString = isFeet.ToString();

Значение isFeetFunctinoAsString равно:

    u => (Convert(u) = 1)

Я не хочу 1, но ноги.

Ответы [ 4 ]

1 голос
/ 10 сентября 2009

Это невозможно в выражении, так как даже до того, как вы можете вмешаться в выражение, перечисление уже было преобразовано в целое число.

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

0 голосов
/ 10 сентября 2009

Вот что вам нужно сделать, чтобы извлечь целочисленное значение и проанализировать его как тип перечисления:

BinaryExpression binaryExpression = (BinaryExpression)isFeet.Body;

LengthUnits units 
    = (LengthUnits)Enum.Parse
        (typeof(LengthUnits), 
        binaryExpression.Right.ToString());

Но это не даст вам именно то, что вы хотите. Перечисления C # похожи на константы в том смысле, что их значения буквально переносятся в источник, когда на них ссылаются. Выражение, которое вы имеете, демонстрирует это, поскольку буквенное значение перечисления встроено в строковое представление выражения.

0 голосов
/ 10 сентября 2009
myEnumValue.ToString ( "G" );

Взят от здесь

[Редактировать]

string isFeetFunctinoAsString = isFeet.ToString("G");
0 голосов
/ 10 сентября 2009
Enum.GetName(Type MyEnumType,  object enumvariable)

Из этого вопроса: C # String enums

Надеюсь, это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...