c# - 动态数组 |展开对象 |使用压缩的初始化语法

标签 c# dynamic object-initializers

我试图在 C# 中使用 DynamicObject,我需要一个动态数组:

var d = new dynamic[];

效果很好。

编辑:请参阅下面的 ExpandoObject。

但我也喜欢使用这种压缩的初始化新语法用一些数据填充该数组:

var d = new dynamic[] { 
  new {
   Name = "Some",
   Number = 1010
  },
  new {
   Name = "Other",
   Number = 2010
  }
 }

但在那种情况下,所有对象都将获得非动态类型“对象”,并且遍历项目将给我一个异常:

foreach (dynamic item in d)
{
  @item.Name
  @item.Number
}

错误:“对象”不包含“名称”的定义。我想我只是以错误的方式初始化数组项。如何改为添加动态对象?

编辑:新内容:

我意识到“动态”没有动态添加属性的能力。

我最好使用 ExpandoObject,它将内部字典中的所有项目公开为属性。但不幸的是,ExpandoObject 似乎不支持这种漂亮的压缩创建语法,并且编译器会提示:

var d = new ExpandoObject[]{
new ExpandoObject(){
    Name="Nnn",
    Number=1080
    }
}

所以答案可能只是:这是不可能的。

最佳答案

希望你真的不需要动力

class Program
{
    static void Main(string[] args)
    {
        var d = new[]
                    {
                        new
                            {
                                Name = "Some",
                                Number = 1010
                            },
                        new
                            {
                                Name = "Other",
                                Number = 2010
                            }
                    };
        foreach (var item in d)
        {
            string s = @item.Name;
            int n = @item.Number;
            Console.WriteLine("{0} {1}", s, n);
        }
    }
}

关于c# - 动态数组 |展开对象 |使用压缩的初始化语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4805765/

相关文章:

c# - Animate 如何改变 wpf 中的 ColumnDefinition 宽度?

html - DIV 高度不会按我想要的方式缩放

dynamic - 如何以编程方式在 Cassandra Hector API 中创建二级索引

c# - 构造函数执行前的属性初始化

ios - 具有相同参数类型的 Swift 初始化器

c# - 当前使用的 SQLite 数据库?

c# - 客户端刷新连接上的C#套接字ErrorCode 10054

c# - XNA 键盘西里尔文输入

c# - 如何检测 ExpandoObject 上是否存在属性?

c# - 如何确定对象初始值设定项是否是调用 Add 方法的初始值设定项?