如何检查对象是否是某种类型的数组?
这工作正常:
var expectedType = typeof(string);
object value = "...";
if (value.GetType().IsAssignableFrom(expectedType))
{
...
}
但是如何在不将 expectedType
设置为 typeof(string[])
的情况下检查 value 是否为字符串数组?我想做一些类似的事情:
var expectedType = typeof(string);
object value = new[] {"...", "---"};
if (value.GetType().IsArrayOf(expectedType)) // <---
{
...
}
这可能吗?
This works fine:
var expectedType = typeof(string);
object value = "...";
if (value.GetType().IsAssignableFrom(expectedType))
{
...
}
But how do I check if value is a string array without setting expectedType
to typeof(string[])
? I want to do something like:
var expectedType = typeof(string);
object value = new[] {"...", "---"};
if (value.GetType().IsArrayOf(expectedType)) // <---
{
...
}
Is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
使用
Type.IsArray
和Type.GetElementType()
检查数组的元素类型。但要注意
Type.IsAssignableFrom()
!如果您想检查完全匹配,则应该检查是否相等(即typeA == typeB
)。如果您想检查给定类型本身是否是类型本身或子类/接口,那么您应该使用Type.IsAssignableFrom()
:Use
Type.IsArray
andType.GetElementType()
to check the element type of an array.But beware of
Type.IsAssignableFrom()
! If you want to check for an exact match, you should check for equality (i.e.typeA == typeB
). If you want to check if a given type is the type itself or a subclass/interface, then you should useType.IsAssignableFrom()
:您可以使用扩展方法(不是必须这样做,而是使其更具可读性):
然后使用:
You can use extension methods (not that you have to but makes it more readable):
And then use:
最简洁、最安全的方法是使用 MakeArrayType:
The neatest and securest way to do it that found is using
MakeArrayType
:作为额外的好处(但我不是 100% 确定。这是我使用的代码...)
有了这个,您可以查找 List、IEnumerable... 并获取 T。
as an added bonus (but I'm not 100% sure. This is the code I use...)
with this you can look for List, IEnumerable... and get the T.
这是另一个样本,
This is another sample,
您实际上需要知道数组的类型吗?或者您只需要元素属于某种类型?
如果是后者,您可以简单地过滤仅与您想要的匹配的元素:
Do you actually need to know the type of the array? Or do you only need the elements to be of a certain type?
If the latter, you can simply filter only the elements that match what you want:
对于数组为真
true for array