2012-10-31 70 views
0

我正在嘗試編寫一個泛型方法,該方法可以接受任何類型爲int的枚舉並能夠將其轉換爲其int值。例如:如何編寫一個方法,將枚舉作爲泛型並返回int值

public int GetIntValue(Enum enumValue) { 
    return (int)enumValue; 
} 

這裏是我已經做到了這一點的一種方式,但似乎有一個更好的辦法:

public static int ToInt(this Enum value) { 
    return (int) Enum.Parse(value.GetType(), Enum.GetName(value.GetType(), value)); 
} 

任何想法?

回答

2

你大多與例2了吧 - 你應該能夠做到這一點:

public static int ToInt(this Enum value) 
{ 
    return Convert.ToInt32(value); 
} 
+1

都能跟得上...... *無法將類型 'System.Enum' 到 '廉政' * –

+0

做'Convert.ToInt32(值)',也許是程序不能處理類型轉換= D – Tejs

+0

'Convert.ToInt32(value)'工作。 –

0

有幾個選項來枚舉轉換成它的潛在價值,這也適用於仿製藥:

return Convert.ToInt32(enumValue) 

return (int)enumValue; 

Type integralType = Enum.GetUnderlyingType (enumValue.GetType()); 
return Convert.ChangeType (enumValueEnum, integralType); 

or first returns the string and later convert it to int?

return int.Parse(anyEnum.ToString("D")); 

但我個人更喜歡第一種選擇

+0

如果基礎類型是Int64並且該值大於int.MaxValue,該怎麼辦? –

+1

Convert.ToInt64(enumValue)?如果你有int.MaxValue + 1它將等於int.MinValue ... – mrtentje

0

下面的代碼片段顯示了使用泛型這樣做有兩種方式。

public enum MyEnum 
{ 
    Three = 3, 
    Seven = 7 
} 

public static class MyExtensions 
{ 
    public static int ToInt<T>(this T value) 
    { 
     return Convert.ToInt32(value); 
    } 
} 

[TestFixture] 
public class CodeTests 
{ 
    public int GetInt<T>(T value) 
    { 
     return Convert.ToInt32(value); 
    } 

    [Test] 
    public void TestOne() 
    { 
     Assert.AreEqual(7, GetInt(MyEnum.Seven)); 
    } 

    [Test] 
    public void TestTwo() 
    { 
     Assert.AreEqual(7, MyEnum.Seven.ToInt()); 
    } 
} 
+0

我不會讓這是一個通用的方法,因爲大多數對象不能轉換爲int。 –

+0

同意,我想也一樣,但問題是如何使用通用方法。轉換爲int的問題是一種設計氣味。那就是'你爲什麼要那樣做'?回答這個問題就會消失......但我回答了編碼問題。 –

+0

我認爲他的意思是通用的,如「針對每種類型的枚舉」。 –

0

平原和簡單,只需使用

public static int ToInt(this Enum value) 
{ 
    return Convert.ToInt32(value); 
}