2012-10-31 98 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); 
}