[英]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.