繁体   English   中英

如何通过反射区分集合与单个对象?

[英]How to differentiate a collection versus a single object through reflection?

我有这个:

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

使用Entity Framework从存储库中提取实体。

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

我试过检查类型,但不确定要将它与之比较。

var VirtualType = Virtual.GetType();

在与调试器检查,虚拟要么是一个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)

但即使是收藏品也是如此。

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

检查它是否实现了IEnumerable

if (Virtual is IEnumerable)
{
    // ...
}

只需从查看代码中快速猜测一下。

//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){}

Type.IsAssignableFrom()是一种非常有用的方法,用于确定类型支持的赋值:

if (VirtualType.IsAssignableFrom(typeof(ICollection)) {
  // Do something
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM