如何创建Parms枚举[]强制到Ints的重载
本文关键字:Ints 重载 枚举 何创建 创建 Parms | 更新日期: 2023-09-27 18:24:16
给定此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
?
我已经添加了我的解决方案,但我很想看看是否有一些简单的东西我错过了
public void Test(params Foo[] values)
{
var valuesAsInts = values.Select(x => (int)x);
Test(valuesAsInts);
}
仅仅调用Cast<int>()
是不起作用的,所以我创建了另一个helper方法将其转换为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