use*_*327 2 .net c# list hashset
我有两种显示方法:一种是项目列表,另一种是项目的 HashSet。方法是一样的。有没有办法用参数类型编写方法,这样我就可以使用相同的方法,而不管传递给方法的参数是什么类型:List<T>或HashSet<T>?
方法是:
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();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该ICollection<T>界面:
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();
}
Run Code Online (Sandbox Code Playgroud)
根据List<T>和HashSet<T>文档都实现ICollection<T>和IReadOnlyCollection<T>,您可以使用这些接口中的任何一个,因为它们具有Count属性。
由于您没有修改集合,只显示它,IReadOnlyCollection<T>在这里看起来更好
public static void DisplayCollection<T>(IReadOnlyCollection<T> collection)
{
int i = 0;
foreach (T item in collection)
{
Console.Write(item.ToString());
if (i < collection.Count - 1)
{
Console.Write(", ");
}
i++;
}
Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您只需要集合的字符串表示形式,则string.Join具有重载接受的方法IEnumerable<T>允许您在一行中完成
var list = new List<int>() { 1, 2, 3, 4 };
var display = string.Join(", ", list);
Console.WriteLine(display);
Run Code Online (Sandbox Code Playgroud)
上面的代码会打印出来1, 2, 3, 4,和DisplayCollection<T>上面的方法一样