C# 多类型多维数组(或列表或字典)?

C# 多类型多维数组(或列表或字典)?,c#,C#,找不到确切的问题。。。我想创建一个列表(或字典或数组,无论它在C#,.NET中被称为什么),在那里我可以存储不同类型的数组/列表/dict 例如,在PHP中,我是这样做的: $x= array ( 'Names'=> array( "James", "Nicolas", "Susan"), //Strings 'Age'=> array( 18, 52, 37), //Int 'Male'=> array( t

找不到确切的问题。。。我想创建一个列表(或字典或数组,无论它在C#,.NET中被称为什么),在那里我可以存储不同类型的数组/列表/dict

例如,在PHP中,我是这样做的:

$x= array (
   'Names'=> array( "James", "Nicolas", "Susan"),    //Strings
   'Age'=> array( 18, 52, 37),                       //Int
   'Male'=> array( true, true, false),               //Bool
);
如何在C#/.NET中实现类似的功能

p、 或者,如果可能,多种类型,如:

$y = array ( 
    $x => (
     ..... multi-element, like above

    ),
    $z => (
     ..... multi-element, like above

    )
);

创建一个类来保存信息,如
列表
列表
列表
。但是,更好的方法是将单个实体的所有信息保存在单个类中,并存储这些项的列表:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool Male { get; set; }
}
现在将该类型的实例存储在列表中:

var list = new List<Person> { 
    new Person { Name = "James", Age = 18, Male = true }, 
    new Person { Name = "Nicolas", Age = 52, Male = true }, 
    new Person { Name = "Susan", Age = 37, Male = false }
};

创建一个类来保存信息,如
列表
列表
列表
。但是,更好的方法是将单个实体的所有信息保存在单个类中,并存储这些项的列表:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool Male { get; set; }
}
现在将该类型的实例存储在列表中:

var list = new List<Person> { 
    new Person { Name = "James", Age = 18, Male = true }, 
    new Person { Name = "Nicolas", Age = 52, Male = true }, 
    new Person { Name = "Susan", Age = 37, Male = false }
};
在版本7之前的C#中,您必须创建一个可以存储列表的类:

class Item {
    public List<string> Names { get; }
    public List<int> Ages { get; }
    public List<bool> Males { get; }
}
类项目{
公共列表名称{get;}
公共列表年龄{get;}
公共列表{get;}
}
还可以使用元组,其缺点是没有描述性属性名称:

Tuple<List<string>, List<int>, List<bool>> tuple =
    Tuple.Create(new List<string>(), new List<int>(), new List<bool>());
元组=
Create(new List(),new List(),new List());
在C#7中,您可以使用值元组,而无需创建类:

(List<string> Names, List<int> Ages, List<bool> Males) itemLists =
    (new List<string>(), new List<int>(), new List<bool>());
(列出姓名、年龄、男性)项目列表=
(新列表(),新列表(),新列表());
并按如下方式访问组件:

persons.Names.RemoveAt(1);
persons.Ages.RemoveAt(1);
persons.Male.RemoveAt(1);
List<string> names = itemLists.Names;
List name=itemLists.name;

你应该认真考虑不要创建一个包含列表的类,但是要包含一个包含类(或元组)的列表。下面是一个C#7值元组的示例:

List<(string Name, int Age, bool Male)> list = new List<(string, int, bool)>();
List List=新列表();
这种构造通常更容易处理,因为您可以循环一个列表,然后处理一个包含所有相关数据的项目。

在7版之前的C#中,您必须创建一个可以存储列表的类:

class Item {
    public List<string> Names { get; }
    public List<int> Ages { get; }
    public List<bool> Males { get; }
}
类项目{
公共列表名称{get;}
公共列表年龄{get;}
公共列表{get;}
}
还可以使用元组,其缺点是没有描述性属性名称:

Tuple<List<string>, List<int>, List<bool>> tuple =
    Tuple.Create(new List<string>(), new List<int>(), new List<bool>());
元组=
Create(new List(),new List(),new List());
在C#7中,您可以使用值元组,而无需创建类:

(List<string> Names, List<int> Ages, List<bool> Males) itemLists =
    (new List<string>(), new List<int>(), new List<bool>());
(列出姓名、年龄、男性)项目列表=
(新列表(),新列表(),新列表());
并按如下方式访问组件:

persons.Names.RemoveAt(1);
persons.Ages.RemoveAt(1);
persons.Male.RemoveAt(1);
List<string> names = itemLists.Names;
List name=itemLists.name;

你应该认真考虑不要创建一个包含列表的类,但是要包含一个包含类(或元组)的列表。下面是一个C#7值元组的示例:

List<(string Name, int Age, bool Male)> list = new List<(string, int, bool)>();
List List=新列表();

这种结构通常更容易处理,因为您可以循环一个列表,然后处理一个包含所有相关数据的项目。

正如@HimBromBeere所说,您可以创建一个
Person
类:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool Male { get; set; }
}
现在需要定义另一个类来存储结果

public class Result
{
    public List<string> Names { get; } = new List<string>();
    public List<int> Age { get; } = new List<int>();
    public List<bool> Male { get; } = new List<bool>();
}
公共类结果
{
公共列表名称{get;}=new List();
公共列表年龄{get;}=new List();
公共列表男性{get;}=new List();
}
此时,您可以使用Linq将人员列表转换为预期输出

var persons = new List<Person> {
      new Person { Name = "James", Age = 18, Male = true },
      new Person { Name = "Nicolas", Age = 52, Male = true },
      new Person { Name = "Susan", Age = 37, Male = false }
  };

var result = persons.Aggregate(new Result(), (c, n) =>
{
    c.Names.Add(n.Name);
    c.Age.Add(n.Age);
    c.Male.Add(n.Male);
    return c;
});
var persons=新列表{
新人{Name=“James”,年龄=18岁,男性=true},
新人{Name=“Nicolas”,年龄=52岁,男性=true},
新人{Name=“Susan”,年龄=37,男性=false}
};
var result=persons.Aggregate(新结果(),(c,n)=>
{
c、 名称。添加(n.名称);
c、 添加(n.年龄);
c、 男性。添加(n.男性);
返回c;
});

正如@HimBromBeere所说的,您可以创建一个
人员
类:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool Male { get; set; }
}
现在需要定义另一个类来存储结果

public class Result
{
    public List<string> Names { get; } = new List<string>();
    public List<int> Age { get; } = new List<int>();
    public List<bool> Male { get; } = new List<bool>();
}
公共类结果
{
公共列表名称{get;}=new List();
公共列表年龄{get;}=new List();
公共列表男性{get;}=new List();
}
此时,您可以使用Linq将人员列表转换为预期输出

var persons = new List<Person> {
      new Person { Name = "James", Age = 18, Male = true },
      new Person { Name = "Nicolas", Age = 52, Male = true },
      new Person { Name = "Susan", Age = 37, Male = false }
  };

var result = persons.Aggregate(new Result(), (c, n) =>
{
    c.Names.Add(n.Name);
    c.Age.Add(n.Age);
    c.Male.Add(n.Male);
    return c;
});
var persons=新列表{
新人{Name=“James”,年龄=18岁,男性=true},
新人{Name=“Nicolas”,年龄=52岁,男性=true},
新人{Name=“Susan”,年龄=37,男性=false}
};
var result=persons.Aggregate(新结果(),(c,n)=>
{
c、 名称。添加(n.名称);
c、 添加(n.年龄);
c、 男性。添加(n.男性);
返回c;
});
如果您使用的是C#3或更高版本,则可以使用匿名对象:

var x = new
{
    Names = new[] {"James", "Nicolas", "Susan"},
    Age = new[] {18, 52, 37},
    Male = new[] {true, true, false}
};
对于第二个示例,您可以使用以下代码:

var y = new
{
    x = new
    {
        Names = new[] {"James", "Nicolas", "Susan"},
        Age = new[] {18, 52, 37},
        Male = new[] {true, true, false}
    },
    // z = new { /* same code as above */ }
};
如果您使用的是C#3或更高版本,则可以使用匿名对象:

var x = new
{
    Names = new[] {"James", "Nicolas", "Susan"},
    Age = new[] {18, 52, 37},
    Male = new[] {true, true, false}
};
对于第二个示例,您可以使用以下代码:

var y = new
{
    x = new
    {
        Names = new[] {"James", "Nicolas", "Susan"},
        Age = new[] {18, 52, 37},
        Male = new[] {true, true, false}
    },
    // z = new { /* same code as above */ }
};

创建一个类,将信息保存为
列表
列表
列表
@HimBromBeere我在C#中有点新手,因此,只有完整的答案(真实示例)对我有帮助。创建一个类,将信息保存为
列表
列表
@HimBromBeere我在C#中有点新手,所以,只有完整的答案(真实的例子)对我有帮助。这是一个有线的想法