C:多元素列表?(就像一张记录清单):怎么做最好?


C#: Multi element list? (Like a list of records): How best to do it?

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

我是新来的C,感谢所有的帮助!(堆垛溢出岩石!)

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

1
2
3
4
5
6
7
8
public static List<string> GetCities()
{
  List<string> cities = new List<string>();
  cities.Add("Istanbul");
  cities.Add("Athens");
  cities.Add("Sofia");
  return cities;
}

如果我希望列表中每个记录有两个属性,我该怎么做?(作为数组?)

例如,这个伪代码的真正代码是什么?:

1
2
3
4
5
6
7
8
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;
}

谢谢您!


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class City
{
    public City(string name, string country)
    {
        Name = name;
        Country = country;
    }

    public string Name { get; private set; }
    public string Country { get; private set; }
}

public List<City> GetCities()
{
    return new List<City>{
        new City("Istanbul","Turkey"),
        new City("Athens","Greece"),
        new City("Sofia","Bulgaria")
    };
}

如果您确实不需要一个列表,而且不太可能,那么您可以使返回类型IEnumerable更通用。您仍然可以返回列表,但也可以这样做:

1
2
3
4
5
6
public IEnumerable<City> GetCities()
{
    yield return new City("Istanbul","Turkey"),
    yield return new City("Athens","Greece"),
    yield return new City("Sofia","Bulgaria")
}

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


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

1
2
3
4
5
List<Tuple<string,string>> myShinyList = new List<Tuple<string,string>> {
    Tuple.Create("Istanbul","Turkey"),
    Tuple.Create("Athens","Greece"),
    Tuple.Create("Sofia","Bulgaria")
}

为什么没有人提到一个Dictionary<>

我想用字典比较容易。据我所知,OP希望有两个相互关联的值,在这种情况下,一个国家和它的资本。

[cc lang="csharp"]dictionarycapital=new dictionary(){"伊斯坦布尔","土耳其