C# 如何将一个数组转换为一个如此大的数组?

C# 如何将一个数组转换为一个如此大的数组?,c#,C#,我有一个元素类型: public class FieldInfo { public string Label { get; set; } public string Value { get; set; } } 我有一个数组,里面装满了FieldInfo对象 FieldInfo[] infos = new FieldInfo[] { new FieldInfo{Label = "label1",

我有一个元素类型:

public class FieldInfo
{
  public string Label { get; set; }
  public string Value { get; set; }
}
我有一个数组,里面装满了
FieldInfo
对象

FieldInfo[] infos = new FieldInfo[]
                      {
                        new FieldInfo{Label = "label1", Value = "value1"},
                        new FieldInfo{Label = "label2", Value = "value2"}
                      };
现在,我想将该数组转换为包含以下值的新数组:

string[] wantThatArray = new string[] {"label1", "value1", "label2", "value2"};
infos
这样的数组转换到
wantThatArray
这样的数组,有没有一种简单的方法
也许使用LINQ的Select?

我会保持简单:

string[] wantThatArray = new string[infos.Length * 2];
for(int i = 0 ; i < infos.Length ; i++) {
   wantThatArray[i*2] = infos[i].Label;
   wantThatArray[i*2 + 1] = infos[i].Value;
}
string[]wantThatArray=新字符串[infos.Length*2];
for(int i=0;i
FieldInfo[,]infos=新的FieldInfo[,]{
新字段信息{“label1”,“value1”},
新字段信息{“label2”,“value2”}
};
字符串[]to=infos.Cast().ToArray();

现在,您只需将
转换为
infos
即可,这与Marc Gravell的解决方案略有不同

string[] wantThatArray = infos
    .SelectMany(f => new[] {f.Label, f.Value})
    .ToArray();
string[] wantThatArray = new string[infos.Length * 2];
for (int i = 0, k = 0; i < infos.Length; i++, k += 2) {
   wantThatArray[k] = infos[i].Label;
   wantThatArray[k + 1] = infos[i].Value;
}
string[]wantThatArray=新字符串[infos.Length*2];
for(inti=0,k=0;i
另一种变体:

string[] yourarray = infos.Select(x => string.Format("{0},{1}", x.Label, x.Value))
                          .Aggregate((x, y) => string.Format("{0},{1}", x, y))
                          .Split(',');

嗯,但不太好(与其他类相比!

只是提醒一下:如果您靠近反射,调用类
FieldInfo
可能会导致很多混乱。此外-您的对象初始值设定项无效-
newfieldinfo{“label1”,“value1”}
是不合法的C#谢谢Marc。我的类的真实名称是
InputFieldInfo
。我已经缩短了我的示例。现在你有了答案,你有没有考虑过使用结构而不是创建一个全新的类?我已经解决了对象初始值设定项的问题。@jvanh1我不确定这是一个好建议;它可能是一个明智的选择如果它是不可变的,等等,但是:这个决定并不像“它小”那么简单应该注意的是,这在中间创建了许多额外的数组等等,并且创建了许多中间枚举器等等。为了实现简单的事情,需要大量的开销。+ 1这是LINQ中的工作,但是我仍然坚持与它们一样的for for LooLi这两个原因,贾景晖肯定是为了效率而获胜,但是这一个是很多的。更优雅。@MarcGravel,完全正确。这是同一个老问题“优雅、可读性与性能”。在特定情况下,每个解决方案都可能是更好的选择。@Andrei我需要一些时间来理解
SelectMany
。但这正是我需要的。请参阅问题的编辑;
infos
对象不是二维数组。很好;您还可能会丢失
k+=2
,并拥有
[k++]
在循环体的两行中都是,但是由于在for部分中初始化了
k
,因此在那里增加它也更符合逻辑。它使语句更加对称。然后我有一个数组
新字符串[]{“label1,value1”,“label2,value2”};
。这与我想要的不同,或者我遗漏了什么。哦,但是是的,我完全遗漏了它。然后我将不得不使用聚合,并按“,”分割…不是很好,不是吗?很抱歉回答不好。
string[] yourarray = infos.Select(x => string.Format("{0},{1}", x.Label, x.Value))
                          .Aggregate((x, y) => string.Format("{0},{1}", x, y))
                          .Split(',');