将'enum'数组转换为'int'数组

Wal*_*ssa 36 .net c#

我正在尝试将Enum数组转换为int数组:

public enum TestEnum
{
Item1,
Item2
}

int[] result = Array.ConvertAll<TestEnum, int>(enumArray, new Converter<TestEnum, int>(Convert.ToInt32));
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当在Array.ConvertAll中使用时,Convert.ToInt32不起作用,所以我不得不做一些更改:

int[] result = Array.ConvertAll<TestEnum, int>(enumArray, new Converter<TestEnum, int>(ConvertTestEnumToInt));

public static int ConvertTestEnumToInt(TestEnum te)
{
return (int)te;
}
Run Code Online (Sandbox Code Playgroud)

出于好奇,有没有办法让这个工作不使用额外的方法?

问候

Mar*_*ell 48

只需使用匿名方法进行投射:

int[] result = Array.ConvertAll<TestEnum, int>(
    enumArray, delegate(TestEnum value) {return (int) value;});
Run Code Online (Sandbox Code Playgroud)

或者使用C#3.0,一个lambda:

int[] result = Array.ConvertAll(enumArray, value => (int) value);
Run Code Online (Sandbox Code Playgroud)

  • @quetzalcoatl 实际上不包括任何拳击;奇怪 - 我很确定这以前不起作用,但我无法在旧框架上重现它失败 (2认同)

Jay*_*uzi 47

幸运的是,C#3.0包括一个Cast操作:

int[] result = enumArray.Cast<int>().ToArray();
Run Code Online (Sandbox Code Playgroud)

如果你停止使用数组并开始使用IEnumerable<>,你甚至可以摆脱这个ToArray()电话.


小智 9

TestEnumArray.Select(x =>(int)x)).ToArray()


iKn*_*ing 5

这就像一个魅力:

var intArray = enumArray.Select(e => (int)e).ToArray();
Run Code Online (Sandbox Code Playgroud)

就像这样做:

var intList = enumArray.Select(e => (int)e).ToList();
Run Code Online (Sandbox Code Playgroud)