C# 是否有同时包含以下两种类型:列表<;T>;还有HashSet<;T>;?

C# 是否有同时包含以下两种类型:列表<;T>;还有HashSet<;T>;?,c#,.net,list,hashset,C#,.net,List,Hashset,我有两个显示的方法:一个是项目列表,另一个是项目集。方法相同。有没有一种方法可以编写参数类型的方法,这样无论传递给方法的参数类型是什么,我都可以使用相同的方法:List或HashSet 这些方法是: public static void DisplayList<T>(List<T> list) { int i = 0; foreach (T item in list) { Consol

我有两个显示的方法:一个是项目列表,另一个是项目集。方法相同。有没有一种方法可以编写参数类型的方法,这样无论传递给方法的参数类型是什么,我都可以使用相同的方法:
List
HashSet

这些方法是:

    public static void DisplayList<T>(List<T> list)
    {
        int i = 0;
        foreach (T item in list)
        {
            Console.Write(item.ToString());
            if (i < list.Count - 1)
            {
                Console.Write(", ");
            }
            i++;
        }
        Console.WriteLine();
    }

    public static void DisplayHashSet<T>(HashSet<T> set)
    {
        int i = 0;
        foreach (T item in set)
        {
            Console.Write(item.ToString());
            if (i < set.Count - 1)
            {
                Console.Write(", ");
            }
            i++;
        }
        Console.WriteLine();
    }
公共静态无效显示列表(列表)
{
int i=0;
foreach(列表中的T项)
{
Console.Write(item.ToString());
如果(i<列表计数-1)
{
控制台。写(“,”;
}
i++;
}
Console.WriteLine();
}
公共静态void DisplayHashSet(HashSet集)
{
int i=0;
foreach(集合中的T项)
{
Console.Write(item.ToString());
如果(i
您可以使用以下界面:

public static void DisplayHashSet<T>(ICollection<T> col)
{
    int i = 0;
    foreach (T item in col)
    {
        Console.Write(item.ToString());
        if (i < col.Count - 1)
        {
            Console.Write(", ");
        }
        i++;
    }
    Console.WriteLine();
}
publicstaticvoiddisplayhashset(ICollection列)
{
int i=0;
foreach(列中的T项)
{
Console.Write(item.ToString());
如果(i<列计数-1)
{
控制台。写(“,”;
}
i++;
}
Console.WriteLine();
}
根据和实现的文档,您可以使用这些接口中的任何一个,因为它们具有
Count
属性

由于您没有修改集合,只是显示它,
IReadOnlyCollection
在这里看起来更好

publicstaticvoiddisplaycollection集合(IReadOnlyCollection集合)
{
int i=0;
foreach(集合中的T项)
{
Console.Write(item.ToString());
如果(i
然而,若您只需要集合的字符串表示,那个么带有重载接受
IEnumerable
的方法允许您在一行中完成这项工作

var list=newlist(){1,2,3,4};
var display=string.Join(“,”列表);
控制台写入线(显示);

上面的代码将打印
1,2,3,4
,这与上面的
DisplayCollection
方法相同

IEnumerable没有计数,您需要使用系统。Linq获取IEnumerable计数
enumerable.Count()
ICollection
如果使用
i!=0
若要在项目前添加逗号,您不需要
计数
,并且可以灵活地接受
IEnumerable
)非常感谢你!1.我没有提到我使用VisualStudio2010,因此我可能不知道IReadOnlyCollection类型。2.displayString是一个我没有想到的好主意。@user2102327
IReadOnlyCollection
是在.NET 4.5中添加的,它与您的Visual Studio版本无关,它是关于您应用程序的目标框架。您可以使用.NET 2.0中添加的
ICollection
<代码>字符串.Join
可从.NET 1.1 afaik获得