【问题标题】:Fill all options of an Enum into Nullable<Enum> array将 Enum 的所有选项填充到 Nullable<Enum> 数组中
【发布时间】:2018-04-28 19:28:55
【问题描述】:

我有一个Enum 需要进入ArrayNullable

StatusType?[] statusTypes = null; //Array to fill

我尝试像这样填写statusTypes

statusTypes = (StatusType?[])Enum.GetValues(typeof(StatusType))

我收到以下错误:

System.InvalidCastException: '无法将'x.Entities.Enums.StatusType[]'类型的对象转换为'System.Nullable`1[x.Entities.Enums.StatusType][]'类型。'

如何用Enum[] 填充Enum?[]?我敢肯定这很容易解决,但我现在已经被它难住了。谢谢。

【问题讨论】:

  • 从概念上讲,有两种方法可以将一堆Enums 变成Enum?[]。一种是将您的值组合成Enum[],然后将其转换为Enum?[]。如您所见,这是不可能的。如答案所示,正确的方法是另一种方法:首先将每个Enum分别转换为Enum?,然后将它们组合为Enum?[]

标签: c# arrays enums


【解决方案1】:

使用LINQ的Cast&lt;T&gt;()扩展方法并提供目标类型:

statusTypes = Enum.GetValues(typeof(StatusType)).Cast<StatusType?>().ToArray();

【讨论】:

    【解决方案2】:

    您不能只转换数组。类型不兼容。您可以使用Array.ConvertAll 进行转换:

    Array.ConvertAll((StatusType[])Enum.GetValues(typeof(StatusType)), x => (StatusType?)x);
    

    【讨论】:

    • 谢谢,好像做了些小改动,需要在Enum.GetTypes之前指定&lt;TInput, TOutput&gt;(StatusType[]),现在看起来像这样:statusTypes = Array.ConvertAll&lt;StatusType, StatusType?&gt;((StatusType[])Enum.GetValues(typeof(StatusType)), x =&gt; (StatusType?)x);
    猜你喜欢
    • 1970-01-01
    • 2019-11-30
    • 2012-06-05
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多