我试图在 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/