如何创建Parms Enum []重载转换为Ints

时间:2014-09-23 15:06:04

标签: c#

鉴于此LinqPad C#程序

void Main() { Test(new [] {(int)Foo.A, (int)Foo.B, (int)Foo.C}); }

// External Library Call
public void Test(IEnumerable values){ values.Dump(); }

public enum Foo { A,B,C }

我想简化Test的调用网站,所以我创建了这个帮助方法:

public void Test(params Foo[] values){
    Test((IEnumerable)values);
}

将调用网站改为:

Test(Foo.A, Foo.B, Foo.C);

但我很快注意到输出已从

更改
0
1
2

A
B
C

如何保留params Foo[]签名(因为它使调用网站非常干净),但是将其视为int,而不是Foo

我已经添加了我的解决方案,但我很想知道是否有一些我错过的简单。

2 个答案:

答案 0 :(得分:3)

public void Test(params Foo[] values)
{
    var valuesAsInts = values.Select(x => (int)x);
    Test(valuesAsInts);
}

答案 1 :(得分:0)

只是调用Cast<int>()不起作用,所以我创建了另一个帮助方法将其转换为object[]

void Main()
{
    Test(Foo.A, Foo.B, Foo.C);  
}

// External Library Call
public void Test(IEnumerable values){
    values.Dump();
}

public enum Foo {
    A,B,C
}

public void Test(params Foo[] values){
    Test(ToObjectArray(values.Cast<int>()));
}

public static object[] ToObjectArray<T>(IEnumerable<T> values)
{
    var array = values.ToArray();
    var objArray = new object[array.Length];
    array.CopyTo(objArray, 0);
    return objArray;
}

输出现在应该是:

0
1
2