【问题标题】:Is it a jagged array declaration?它是锯齿状数组声明吗?
【发布时间】:2017-11-10 07:49:03
【问题描述】:

你能解释一下element数组声明背后的语法吗?这是一个锯齿状数组吗?在这种情况下,ValueType 是什么?

 enum Color { Red = 1, Green, Blue }
 enum Theme { Dark = 1, Light, NotSure }

 public static void Main(string[] args)
 {
     var elements = new[]
     {
         new { Value = 1, Type = typeof(Color) },
         new { Value = 2, Type = typeof(Theme) },
         new { Value = 3, Type = typeof(Color) },
         new { Value = 1, Type = typeof(Theme) },
         new { Value = 2, Type = typeof(Color) },
     };

     foreach (var element in elements)
     {
         var enumValue = Enum.ToObject(element.Type, element.Value);
         Console.WriteLine($"{element.Type.Name}({element.Value}) = {enumValue}");
     }
 }

【问题讨论】:

  • elements 是一个匿名类型实例的数组
  • 但它只是一个简单的一维数组——它既不是数组数组(锯齿状数组)也不是多维(矩形)数组。

标签: c# .net arrays


【解决方案1】:

让我们从内到外:elements数组的项目

   new { Value = 1, Type = typeof(Color) }

匿名类型实例(具有两个属性Value 类型为intType 类型为Type);详情见https://msdn.microsoft.com/en-us/library/bb397696(v=vs.90).aspx

elements数组

   var elements = new[] {
     new { Value = 1, Type = typeof(Color) },
     new { Value = 2, Type = typeof(Theme) },
     ... 
   };

是这样的匿名类型实例的简单1d数组

【讨论】:

  • 好答案。我要补充一点,数组声明有效,因为编译器将所有单个元素解释为相同的匿名类型,因为它们具有相同类型的相同属性。
【解决方案2】:

这是一个锯齿状数组吗?

没有。它是一个匿名对象的一维数组。

在这种情况下,ValueType 是什么?

匿名类的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2018-09-27
    • 2014-03-04
    • 2020-04-02
    • 1970-01-01
    相关资源
    最近更新 更多