显示列表中的所有字符串

本文关键字:字符串 列表 显示 | 更新日期: 2023-09-27 18:16:25

我正在尝试创建两个集合,并将它们放在一个列表中,并显示列表中的所有项目。我的代码出现错误。错误:System.Collections.Generic.List 1[System.Collections.Generic.SortedSet 1[System.String]]我在下面附上我的代码。感谢您的帮助。

    namespace Prog 5
    {
        class Program
        {        
    static void Main(string[] args)
    {
        List<SortedSet<string>> items = new List<SortedSet<string>>();
        SortedSet<string> set = new SortedSet<string>();
        SortedSet<string> set2 = new SortedSet<string>();
        set.Add("a");
        set.Add("b");
        set.Add("d");
        set.Add("c");
        set2.Add("e");
        set2.Add("d");
        set2.Add("c");
        foreach (string item in set)
        {
            items.Add(set);
        }
        foreach (string item in set2)
        {
            items.Add(set2);
        }
        DisplayItem(items);
    }
    public static void DisplaySet(SortedSet<string> set)
    {
        string set1 = string.Join(",", set);
        Console.WriteLine(set1);
        Console.ReadLine();
    }
    public static void DisplayItem(List<SortedSet<string>> items)
    {
        foreach (SortedSet<string> item in items)
        {
            Console.WriteLine(items);
            Console.ReadLine();
        }
    }
        }

显示列表中的所有字符串

DisplayItem(…(中有Console.WriteLine(items(…,类型为List>。ToString((会自动被调用,生成一个字符串供Console.WriteLine输出:这就是您获得当前消息的原因。我猜您想将的每个项目都写入控制台。

public static void DisplayItem(List<SortedSet<string>> items)
{
    foreach (SortedSet<string> item in items)
    {
        DisplaySet(item);
    }
}

SortedSet<string>继承自Object,ToString((的默认行为为GetType().ToString();,因为您可以在控制台中接收System.Collections.Generic.List1[System.Collections.Generic.SortedSet1[System.String]]参考代码

public virtual String ToString()
{
    return GetType().ToString();
}

解决方案:如果你想在控制台中显示SortedSet的元素,你应该使用这个:

Console.WriteLine(string.Join(",", item.ToArray()));

这将连接SortedSet中的所有字符串,并在控制台中使用,分隔符显示它们。

如果我正确理解了您的需求,您希望将2个SortedSet合并到一个列表或集合中。

以下代码应该可以工作(下面解释它为什么工作(:

class Program
{
    static void Main(string[] args)
    {
        SortedSet<string> items = new SortedSet<string>();
        SortedSet<string> set = new SortedSet<string>();
        SortedSet<string> set2 = new SortedSet<string>();
        set.Add("a");
        set.Add("b");
        set.Add("d");
        set.Add("c");
        set2.Add("e");
        set2.Add("d");
        set2.Add("c");
        foreach (string item in set)
        {
            items.Add(item);
        }
        foreach (string item in set2)
        {
            items.Add(item);
        }
        DisplayItem(items);
    }
    public static void DisplaySet(SortedSet<string> set)
    {
        string set1 = string.Join(",", set);
        Console.WriteLine(set1);
        Console.ReadLine();
    }
    public static void DisplayItem(SortedSet<string> items)
    {
        foreach (string item in items)
        {
            Console.WriteLine(item);
        }
        Console.ReadLine();
    }
}

所列代码中的主要问题是它试图创建OrderedSet<string>对象的列表。由于每个OrderedSet<string>代表一个字符串集合,因此需要对这些集合进行迭代,并将字符串放入一个新集合中。有问题的代码并没有做到这一点。相反,它在列表中添加了7个OrderedSet<string>对象。

更正的代码修复了该问题,并将字符串添加到新的OrderedList<string>中。您可以根据自己的需求决定它是什么集合。如果您需要集合不包含重复项并进行排序,您可以选择一个新的OrderedSet<string>,但如果您不关心重复项,则可以选择List<string>

如果您想比较OrderedSet<string>List<string>之间的差异,您可以简单地将"items"数据类型更改为List<string>并运行程序。

电流输出:

a
b
c
d
e

如果您更改

SortedSet<string> items = new SortedSet<string>();

List<string> items = new List<string>();
...
public static void DisplayItem(List<string> items)
{
...

你会得到:

a
b
c
d
c
d
e