0

私はこれを持っています:

var Virtual = Property.GetValue(Entity, null);

エンティティは、EntityFrameworkを使用してリポジトリからプルされています。

それが単一のオブジェクトなのかコレクションなのかをどのように判断できますか?

タイプを確認してみましたが、何と比較すればいいのかわかりませんでした。

var VirtualType = Virtual.GetType();

デバッガーで検査すると、Virtualはインスタンス化されたDynamicProxyシングルclassまたはHashSetインスタンス化されたのいずれかICollectionです。.GetType()で使用される場合、DynamicProxyこれはスローされます:

Object reference not set to an instance of an object.

私もこれを試しました:

var test = (IEnumerable<object>)Virtual;
if (test.Count() > 0)

これはコレクションでは機能しますが、単一のオブジェクトでは失敗します。

私もこれを試しました:

if (Virtual is Enumerable)

しかし、それはコレクションにとってさえ誤りでした。

どうすれば反射を通して2つを識別できますか?

4

3 に答える 3

0

Type.IsAssignableFrom()タイプがサポートする割り当てを決定するための非常に便利な方法です。

if (VirtualType.IsAssignableFrom(typeof(ICollection)) {
  // Do something
}
于 2012-09-06T20:59:04.790 に答える