C#:将特定枚举类型的数组作为 params object[] 参数传递

标签 c# arrays enums

当尝试通过 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/

相关文章:

javascript - 在 MVC 4 中,我的文本区域没有从默认值重置

java - 全局保存 String 类型值的更好方法?

c# - Linq 获取 List<class> 属性的平均值

C# WPF 应用程序首先打开常规 Windows 窗体

c# - .NET 电子邮件处理建议

在 C : dynamically handling memory 中连接一个 char 数组

JavaScript 数组从索引中删除元素

javascript - 我需要将特殊格式的字符串转换为 JavaScript 数组

c - 即使在 C 中声明后,枚举变量仍显示错误

java - 如何使用整数引用枚举以在数组中使用