【发布时间】:2013-07-14 07:31:57
【问题描述】:
我有一个通用方法,它采用 T 类型的 Enumerables。如果 T 也是一个 Enumerable,我需要将它传递给另一个函数。但是,由于该函数只接受 Enumerables,并且 T 是通用的,因此它不会编译。 我在通过之前检查 T 是否可枚举 - 但显然不是以解决此问题的方式。
我该怎么做?
(显然我可以编写另一种只采用 IEnumerable> 的方法,并在相关的地方使用它,但这似乎不优雅。)
例子:
public static bool EnumerablesAreEqual<T>(IEnumerable<T> a, IEnumerable<T> b)
{
foreach (T x in a)
{
if (x is Enumerable && !EnumerableContainsEnumerable(x, b))
return false;
if (!b.Contains(x))
return false;
}
...
}
我查看了this post,但我不认为这是完全相同的问题。
【问题讨论】:
-
您的
x is Enumerable中的Enumerable是什么?你的意思是接口IEnumerable还是接口IEnumerable<>,或者这是一些class?System.Linq.Enumerable类不可能,因为那是static class。 -
...
a和b是相同类型的集合T,但b可能包含包含a的集合? -
EnumerableContainsEnumerable 是一种检查集合 b 是否包含集合 x 的方法(我将交换参数的顺序以便更明显)。