是否有一种类型同时包含:List<T> 和 HashSet<T>?
Is there a type that includes both: List<T> and also HashSet<T>?
我有两种显示方法:一种是项目列表,另一种是项目哈希集。方法是相同的。有没有办法用参数类型编写方法,这样我就可以使用相同的方法,而不管传递给方法的参数类型: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();
}
您可以使用 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();
}
根据 List<T>
and HashSet<T>
documentation both implement ICollection<T>
and 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();
}
但是,如果您只需要集合的字符串表示形式,string.Join
接受重载的方法 IEnumerable<T>
允许您在一行中完成此操作
var list = new List<int>() { 1, 2, 3, 4 };
var display = string.Join(", ", list);
Console.WriteLine(display);
上面的代码会打印1, 2, 3, 4
,和上面的DisplayCollection<T>
方法一样
我有两种显示方法:一种是项目列表,另一种是项目哈希集。方法是相同的。有没有办法用参数类型编写方法,这样我就可以使用相同的方法,而不管传递给方法的参数类型: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();
}
您可以使用 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();
}
根据 List<T>
and HashSet<T>
documentation both implement ICollection<T>
and 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();
}
但是,如果您只需要集合的字符串表示形式,string.Join
接受重载的方法 IEnumerable<T>
允许您在一行中完成此操作
var list = new List<int>() { 1, 2, 3, 4 };
var display = string.Join(", ", list);
Console.WriteLine(display);
上面的代码会打印1, 2, 3, 4
,和上面的DisplayCollection<T>
方法一样