List <t>在C#中添加方法</t>

时间:2010-12-21 08:43:52

标签: c# list c#-2.0

据我所知。 List Add方法的工作原理如下。

List<string> cities = new List<string>();
cities.Add("New York");
cities.Add("Mumbai");
cities.Add("Berlin");
cities.Add("Istanbul");

如果我将数据结构设计为

List<object> lstObj = new List<object>();            
if (true)  // string members
{
    cities.Add("New York");
    cities.Add("Istanbul");
}
else // List obj members here 
{
    List<object> AListObject= new List<object>();
    cities.Add(AListObject);  // how to handle this?
}

如果我在同一个函数中添加不同类型的成员,List Add方法是否有效。

6 个答案:

答案 0 :(得分:1)

您无法将List<object>添加到List<string>。您可以添加到字符串列表的唯一内容是字符串(或空引用)。你可以改用它:

List<object> cities = new List<object>();

但这似乎是一个糟糕的设计。当您使用object作为集合的通用类型时,您实际上会失去类型安全的所有好处。

对于解析XML,我建议您查看XmlDocument

答案 1 :(得分:1)

由于您创建了类型object的列表,因此可以向其中添加任何内容,因为每个类型都可以装入对象。

答案 2 :(得分:1)

您可以向List<object>添加任何内容,因此如果您将cities更改为List<object>,那么您的代码就可以使用。

var list = new List<object>();

list.Add("hello");
list.Add(1);
list.Add(new List<bool>());

Console.WriteLine(list.Count());

话说回来,几乎可以肯定的是编写你想做的任何事情的坏方法。

答案 3 :(得分:1)

List<object> AListObject = new List<object>();
foreach (object o in AListObject)
{
    string s = o as string;
    if (s != null)
    {
        cities.Add(s);
    }
}

如果你可以使用.NET 3.5中的LINQ而不是下一步:

List<object> AListObject = new List<object>();
cities.AddRange(AListObject.OfType<string>());

答案 4 :(得分:1)

使用带有object的泛型列表作为类型参数毫无意义,也可以使用System.Collections.ArrayList。

答案 5 :(得分:0)

您应该使用List.AddRange方法将多个项目添加到列表中。

cities.AddRange(AListObject);

但是,您在尝试将object添加到string列表时会遇到问题。