T 型の Enumerable を受け取るジェネリック メソッドがあります。T も Enumerable である場合は、それを別の関数に渡す必要があります。ただし、その関数は Enumerables のみを受け取り、T はジェネリックであるため、コンパイルされません。T を渡す前に Enumerable であることを確認していますが、明らかにこの問題を解決する方法ではありません。
これどうやってするの?
(明らかに、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;
}
...
}
この投稿を見ましたが、まったく同じ問題ではないと思います。