当尝试通过 params object[] 将特定 enum
类型的数组作为函数参数传递时,我无法在不首先转换为 object[] 的情况下传递实际数组。但如果我这样做,我将无法访问原始的 enum
类型。
鉴于 enum
和如下所示的函数,这工作正常:
var works = SomeFunction(Season.Fall, Season.Winter);
但是,这失败了,因为它不能隐式转换为对象,所以它传递数组作为第一个参数而不是单个参数:
var seasons = new Season[] {Season.Fall, Season.Winter};
var fail = SomeFunction(seasons);
它也不能转换为 object[],因为之后它无法确定原始类型。如何使用预先确定的数组传入?
[Flags]
public enum Season : byte
{
None = 0,
Spring = 1,
Summer = 2,
Fall = 4,
Winter = 8
}
...
public Something SomeFunction(params object[] values)
{
...
foreach (var value in values)
{
var type = value.GetType();
...
}
}
更新:它可以将 Season[] 数组转换为 object[],但这看起来很不靠谱:
var seasons = new object[original.Length];
for (int i = 0; i < original.Length; i++)
{
seasons[i] = original[i];
}
最佳答案
它就像转换一个包含枚举的对象 [] 而不是转换数组一样简单:
var original = new Season[] {Season.Fall, Season.Winter};
var selectedSeasons = new object[original.Length];
for (int i = 0; i < original.Length; i++)
{
selectedSeasons[i] = original[i];
}
var works = SomeFunctionWithObjectParamsArgs(selectedSeasons);
是的,最终将函数签名更改为通用是最好的,但不适用于我的情况(第三方 API)。
关于C#:将特定枚举类型的数组作为 params object[] 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825764/