C# 填充列表<;T>;来自多个阵列

C# 填充列表<;T>;来自多个阵列,c#,arrays,list,populate,C#,Arrays,List,Populate,因此,基本上我需要用数组而不是手工填充当前列表: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); List<People> people = new List<People>() { new Pe

因此,基本上我需要用数组而不是手工填充当前列表:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            List<People> people = new List<People>()
            {
                new People{Name="John",Age=21,Email="john@abc.com"}
                new People{Name="Tom",Age=30,Email="tom@abc.com"}
            };
        }
    }
我想改为使用数组,从类人员到类主窗口。比如:

    class People
    {
        public string[] Name =
        {
            "John",
            "Tom",
        };
        public int[] Age =
        {
            "21",
            "30",
        }
        ...
    }

我似乎不知道如何使用这些数组来计算这个列表。提前感谢您的时间。

其中一个
Select
重载参数为
index

var names = new[]{ "John", "Tom" };
var ages  = new[]{ 21, 30, };
var mails = new[]{ "mail1", "mail2", };

names.Select((name, index) => 
       new People{
       Name = name, 
       Age = ages[index], 
       Email = mails[index]})
     .Dump();
印刷品:

Name Age Email 
John 21  mail1 
Tom  30  mail2 
您需要确保所有阵列的大小都相同

如果您将“数据”设置为静态会更好


我们可以做
intc=Math.Min(people.Name.Count,people.Age.Count,…)以获得更好的“符号化”

如果这是预填充集合,则有很多方法可以做到这一点

public static class PeopleListFactory
{
   public static IEnumerable<People> Content(int someindicator)
   {
      List<People> result = new List<People>();
      switch (someIndicator)
      {      
        case 0: // fill it in here with and from whatever you like.
        break;
      }
      return result;
   }
}
公共静态类PeopleListFactory
{
公共静态IEnumerable内容(int-someindicator)
{
列表结果=新列表();
开关(指示灯)
{      
案例0://在此处填写您喜欢的内容。
打破
}
返回结果;
}
}
然后以你的主要形式 只是


列表人员=新列表(PeopleListFactory.Content(0))

只是出于好奇,你有什么理由在类中使用数组而不是列表。不是批评,只是好奇。我只想把姓名、年龄等放在不同的数组中,然后把它们放在同一个列表中。我只是不知道还有什么更好的。使用类内人员列表会更好吗?
人员
有多个
姓名
年龄
没有意义。你目前的做法是“正确”的。您可以使用一个简单的
for
循环,从姓名、年龄和电子邮件的单独数组中创建
人。@user2008147不是因为您的方式,不是。我只是好奇您的理由在我看来,正确的方法是在People类中有一个列表,但这只是我的观点,这似乎是最好的选择之一。考虑到对象初始化的格式设置和删除冗余的
()
-这将是最佳解决方案。如果能够使用您的解决方案使其正常工作,非常感谢polkduran和其他帮助您的人!干杯@塞德里克比农同意。你说的对称是指波尔克杜兰写的东西吗?这正是我的意思。好吧,但有一点需要注意:他使用
people.Name.Count这带来了一点不对称的方面。别误会我的意思-我更喜欢他的解决方案而不是我的,但我认为在当前的环境中没有什么好的解决方案在这种情况下:
int c=Math.Min(people.Name.Count,people.Age.Count,…)以获得更好的符号
int c = people.Name.Count;

Enumerable.Range(0,c).Select(i => new People(){Name = people.Name[i], Age = people.Age[i], ...});
public static class PeopleListFactory
{
   public static IEnumerable<People> Content(int someindicator)
   {
      List<People> result = new List<People>();
      switch (someIndicator)
      {      
        case 0: // fill it in here with and from whatever you like.
        break;
      }
      return result;
   }
}