我正在尝试将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)
Jay*_*uzi 47
幸运的是,C#3.0包括一个Cast操作:
int[] result = enumArray.Cast<int>().ToArray();
Run Code Online (Sandbox Code Playgroud)
如果你停止使用数组并开始使用IEnumerable<>,你甚至可以摆脱这个ToArray()电话.
这就像一个魅力:
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)