C#:多元素列表?(就像一张记录列表):如何最好地做到这一点?

C#:多元素列表?(就像一张记录列表):如何最好地做到这一点?,c#,C#,我喜欢列表,因为它们很容易使用和管理。但是,我需要一个包含多个元素的列表,比如记录 我是C#的新手,非常感谢您的帮助!(堆垛溢出的岩石!) 考虑一下这个简单的单元素列表示例,它非常有用: public static List<string> GetCities() { List<string> cities = new List<string>(); cities.Add("Istanbul"); cities.Add("Athens"); c

我喜欢列表,因为它们很容易使用和管理。但是,我需要一个包含多个元素的列表,比如记录

我是C#的新手,非常感谢您的帮助!(堆垛溢出的岩石!)

考虑一下这个简单的单元素列表示例,它非常有用:

public static List<string> GetCities()
{
  List<string> cities = new List<string>();
  cities.Add("Istanbul");
  cities.Add("Athens");
  cities.Add("Sofia");
  return cities;
}
公共静态列表GetCities()
{
列表城市=新列表();
城市。添加(“伊斯坦布尔”);
城市。添加(“雅典”);
城市。添加(“索非亚”);
回归城市;
}
如果我想让列表中的每个记录都有两个属性,我该怎么做?(作为数组?)

例如,这个伪代码的真实代码是什么

public static List<string[2]> GetCities()
{
  List<string> cities = new List<string>();
  cities.Name,Country.Add("Istanbul","Turkey");
  cities.Name,Country.Add("Athens","Greece");
  cities.Name,Country.Add("Sofia","Bulgaria");
  return cities;
}
公共静态列表GetCities()
{
列表城市=新列表();
城市。名称、国家。添加(“伊斯坦布尔”、“土耳其”);
城市。名称、国家。添加(“雅典”、“希腊”);
城市。名称、国家。添加(“索非亚”、“保加利亚”);
回归城市;
}
谢谢大家!

一个
列表
可以保存任何类型的实例-因此您只需创建一个自定义类来保存您想要的所有属性:

public class City
{
   public string Name {get;set;}
   public string Country {get;set;}
}

...

public List<City> GetCities()
{
   List<City> cities = new List<City>();
   cities.Add(new City() { Name = "Istanbul", Country = "Turkey" });
   return cities;
}
公共级城市
{
公共字符串名称{get;set;}
公共字符串国家{get;set;}
}
...
公共列表(城市)
{
列表城市=新列表();
添加(新城市(){Name=“伊斯坦布尔”,Country=“土耳其”});
回归城市;
}
公共级城市
{
公共城市(字符串名称、字符串国家)
{
名称=名称;
国家=国家;
}
公共字符串名称{get;private set;}
公共字符串国家{get;private set;}
}
公共列表(城市)
{
返回新列表{
新城(“伊斯坦布尔”、“土耳其”),
新城(“雅典”、“希腊”),
新城(“索非亚”、“保加利亚”)
};
}
如果您真的不需要列表,而且不太可能需要,那么可以将返回类型设置为更通用的
IEnumerable
。您仍然可以返回列表,但也可以执行以下操作:

public IEnumerable<City> GetCities()
{
    yield return new City("Istanbul", "Turkey"),
    yield return new City("Athens", "Greece"),
    yield return new City("Sofia", "Bulgaria")
}
public IEnumerable GetCities()
{
收益回报新城(“伊斯坦布尔”、“土耳其”),
收益回报新城(“雅典”、“希腊”),
收益回报新城(“索非亚”、“保加利亚”)
}

例如,如果要在城市间循环,直到找到土耳其的第一个城市,或者第一个以字母I开头的城市,那么就不必像列表那样实例化所有城市。相反,第一个城市将被实例化和评估,并且只有在需要进一步评估的情况下,后续城市对象才会被实例化。

对于动态操作,您可以使用元组(在.NET 4.0中):

List myShinyList=新列表{
Tuple.Create(“伊斯坦布尔”、“土耳其”),
Tuple.Create(“雅典”、“希腊”),
Tuple.Create(“索菲亚”、“保加利亚”)
}

为什么没有人提到
词典

我认为使用一个新的工具会更容易。据我所知,OP希望有两个相互关联的值,在这个例子中,一个国家和它的首都

Dictionary<string, string> capitals = new Dictionary<string, string>()
{
    {"Istanbul","Turkey"},
    {"Athens","Greece"},
    {"Sofia","Bulgaria"},
};

要遍历字典中的项,请执行以下操作:

capitals.add("Lisbon, Portugal");
foreach(KeyValuePair<string, string> entry in capitals)
{
    // do something with entry.Value or entry.Key
}
即使创建自己的类(或者我想是结构)是可行的,但是如果目标是创建一个包含两个相互关联的值的列表,那么字典就更简单了。

list cityList=new list{
List<City<string, string, int>> cityList = new List<City<string,string, int>> {
    City.Create("Paris","France", 12000000); // City, Country, population
}

foreach(var v in City)
{
    list.Add([0,0,1])
    Console.Write("First entry: {0}", list[0]);
}
创建(“巴黎”、“法国”,12000000);//城市、国家、人口 } foreach(城市中的v型变量) { 列表。添加([0,0,1]) Write(“第一个条目:{0}”,列表[0]); }
Jonesome对C#来说是个新手,所以我想提一下,这个(正确的)答案也使用了,非常方便。编辑:虽然他想要的似乎是一个
国家
类,它有一个
名称
和一个
列表城市
(或类似的)谢谢!这太棒了!克里斯,谢谢你的提示。我读了你指的参考资料,我(大体上)明白了。你的答案更完整了!干得好你能解释一下吗?
foreach(KeyValuePair<string, string> entry in capitals)
{
    // do something with entry.Value or entry.Key
}
capital[Lisbon]= "..."
List<City<string, string, int>> cityList = new List<City<string,string, int>> {
    City.Create("Paris","France", 12000000); // City, Country, population
}

foreach(var v in City)
{
    list.Add([0,0,1])
    Console.Write("First entry: {0}", list[0]);
}