この回答が掲載されてからかなりの時間が経ちましたが、念のために誰かがまだ回答を探しています...
同様の問題に遭遇しました。私のシナリオでは、BindingSource.DataSource は常に IEnumerable にバインドされますが、リストに項目がない可能性があります。BindingSource には「itemType」というプライベート インスタンス メンバーがあることがわかります。BindingSource がリストにバインドされている場合はリストの要素の型を示し、リストがない場合は BindingSource がバインドされているオブジェクトの型を示します。
フィールド値にアクセスするために、ハック リフレクションを使用しました。
FieldInfo fi =
typeof(BindingSource)
.GetField("itemType", BindingFlags.NonPublic | BindingFlags.Instance);
Type myElementType = fi.GetValue(DataBinder.RestrictedDataBinding) as Type;
多くの調査を行わずに、それが行っていることは、innerList の要素の型を表示していると思います。そのため、DataSource がリスト型であるかどうかは問題ではありません。また、このフィールドは、BindingSource でサポートされているあらゆる種類のリスト (IQueryables などを含む) の要素の型を正確に示すと思います。
警告: 私はこのフィールドをあまりテストしていないので、正しい要素タイプを読み取れない場合があるかどうかはわかりません。たとえば、BindingSource の DataSource プロパティがリセットされると、フィールドは常に正確に更新されますか? DataSource プロパティが別の elementType を持つリストにリセットされた場合はどうなりますか? 私の場合、これらの例外やその他の例外は適用されませんが、テストすることをお勧めします。
最後に、リフレクションを使用してプライベート フィールドをハッキングすると、あらゆる種類の oop 原則が破られます。心に留めておきます。また、itemType フィールドが非表示になっているのには十分な理由がある可能性があることに注意してください。さらに調査する必要がある場合は、BindingSource クラスのコードが公開されています。