我有这个:
var Virtual = Property.GetValue(Entity, null);
正在使用Entity Framework从存储库中提取实体。
如何确定它是单个对象还是集合?
我尝试检查类型,但不确定将其与之比较。
var VirtualType = Virtual.GetType();
使用调试器检查后,Virtual可以是实例化的DynamicProxy
的{{1}},也可以是实例化class
的{{1}}。如果在HashSet
上使用了ICollection
,则会抛出此内容:
.GetType()
我也试过这个:
DynamicProxy
适用于集合,但在单个对象上失败。
我也试过这个:
Object reference not set to an instance of an object.
但即使是收藏也是如此。
如何通过反思来辨别这两个?
答案 0 :(得分:1)
检查它是否实现IEnumerable
:
if (Virtual is IEnumerable)
{
// ...
}
答案 1 :(得分: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){}
答案 2 :(得分:0)
Type.IsAssignableFrom()
是一种非常有用的方法,用于确定类型支持的分配:
if (VirtualType.IsAssignableFrom(typeof(ICollection)) {
// Do something
}