2009-09-10 90 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#枚舉像常量一樣,它們的值在被引用時直接移植到源代碼中。您擁有的表達式正在證明這一點,因爲枚舉的字面值嵌入到表達式的字符串表示形式中。