0

我有这个:

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

正在使用实体框架从存储库中提取实体。

如何确定它是单个对象还是集合?

我尝试检查类型,但不确定将其与什么进行比较。

var VirtualType = Virtual.GetType();

使用调试器检查时,Virtual 要么是DynamicProxy实例化的单一的class,要么是HashSet实例化的ICollection。如果.GetType()DynamicProxythis 上使用,则会抛出:

Object reference not set to an instance of an object.

我也试过这个:

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

它适用于集合,但在单个对象上失败。

我也试过这个:

if (Virtual is Enumerable)

但这是错误的,即使对于收藏也是如此。

我如何通过反思来辨别两者?

4

3 回答 3

1

检查它是否实现IEnumerable

if (Virtual is IEnumerable)
{
    // ...
}
于 2012-09-06T20:50:45.960 回答
1

只是通过查看您的代码快速猜测。

//works for collection but throws exception for single object (as it should)
var test = (IEnumerable<object>)Virtual;

//try using
var test = Virtual as IEnumerable;
if(test == null) // single object

这和

if(Virtual is IEnumerable){}
于 2012-09-06T20:51:17.583 回答
0

Type.IsAssignableFrom()是确定类型支持哪些赋值的非常有用的方法:

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