2009-09-10 75 views
4

当我在表达式上调用ToString()方法时,枚举值被打印为整数。有一些格式超载吗?C#枚举显示在Expression.ToString()

也许我可以从表达式创建一个derviedclass并重写一些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,但脚。

+0

你可以发布一个小而完整的例子来演示这个问题吗? – 2009-09-10 15:10:26

+0

我已经更新了答案.. – 2009-09-10 15:24:02

回答

0
Enum.GetName(Type MyEnumType, object enumvariable) 

从这个问题:C# String enums

希望这是你在找什么。

0
myEnumValue.ToString ("G"); 

here两者

[编辑]

string isFeetFunctinoAsString = isFeet.ToString("G"); 
+0

我认为这个问题应该回答这个问题是否可以从表达式树转换为字符串,而不仅仅是一般的.NET版本。 – 2009-09-10 15:30:03

+1

这不起作用,表达式没有重载.ToString()方法 – Toto 2009-09-10 15:46:24

+0

来自此答案的LInk似乎被破坏。有关枚举格式字符串的Microsoft文档可以在这里找到:https://msdn.microsoft.com/en-us/library/c3s1ez6e(v=vs.110).aspx(在写作时检索)。方法ToString(字符串格式)可用于枚举,但不适用于表达式。 – Manfred 2017-02-18 02:51:57

1

这是不可能在一个表达式,因为即使之前可以用表达式干扰,枚举已经转换到一个整数。

您可能想要检查左侧或右侧的参数是否存在二进制表达式,并且可以手动转换,但我不会建议这样做。

+0

为什么不推荐? – Toto 2009-09-10 15:51:38

+1

因为您应该创建一个全新的ToString方法,因为表达式树每次都没有相同的结构。 你可以有这样的事情:l => l == LengthUnits.FEET; l => LengthUntits.Feet == l; l => l> 2 && l!= LengthUnits.FEET等等 – 2009-09-10 17:04:42

0

这里是你需要做什么才能提取整数值,并分析它的枚举类型:

BinaryExpression binaryExpression = (BinaryExpression)isFeet.Body; 

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

但是,这不会给你想要的到底是什么。 C#枚举像常量一样,它们的值在被引用时直接移植到源代码中。您拥有的表达式正在证明这一点,因为枚举的字面值嵌入到表达式的字符串表示形式中。