鉴于此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
?
我已经添加了我的解决方案,但我很想知道是否有一些我错过的简单。
答案 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