我有一个通用方法,它接受类型为T的Enumerables。如果T也是一个Enumerable,我需要将它传递给另一个函数。但是,由于该函数只接受Enumerables,而T是通用的,因此不会编译。 我在通过它之前检查T是可枚举的 - 但显然不能解决这个问题。
我该怎么做?
(显然我可以编写另一个只接受IEnumerable< IEnumerable< T>>的方法,并在相关的地方使用它,但这似乎不太优雅。)
示例:
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,但我认为这不是同一个问题。
答案 0 :(得分:5)
检查变量的动态类型的事实不会更改其静态类型,以及用于检查调用的内容。
如果你想这样做,你需要一个演员表。您可以使用经过检查的强制转换来一次性完成:
Enumerable ex = x as Enumerable;
if (ex != null && !EnumerableContainsEnumerable(ex, b))
return false;
as
运算符检查是否可以进行强制转换:如果是,它将返回已转换的对象;如果不是,它将返回null
。