c# - 如何检查对象是否是某种类型的数组?

标签 c# .net arrays reflection types

这很好用:

var expectedType = typeof(string);
object value = "...";
if (value.GetType().IsAssignableFrom(expectedType))
{
     ...
}

但是如何在不将 expectedType 设置为 typeof(string[]) 的情况下检查值是否为字符串数组?我想做类似的事情:

var expectedType = typeof(string);
object value = new[] {"...", "---"};
if (value.GetType().IsArrayOf(expectedType)) // <---
{
     ...
}

这可能吗?

最佳答案

使用Type.IsArrayType.GetElementType()检查数组的元素类型。

Type valueType = value.GetType();
if (valueType.IsArray && expectedType.IsAssignableFrom(valueType.GetElementType())
{
 ...
}

当心Type.IsAssignableFrom() .如果要检查类型是否完全匹配,则应检查是否相等 (typeA == typeB)。如果要检查给定类型是类型本身还是子类(或接口(interface)),则应使用 Type.IsAssignableFrom():

typeof(BaseClass).IsAssignableFrom(typeof(ExpectedSubclass))

关于c# - 如何检查对象是否是某种类型的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5274865/

相关文章:

.net - Select-String如何读取文本文件内容?大块?

python - numpy.nditer() 的使用

c++ - 使用 merge 合并 C++ 中的两个列表

java - 在 Java 中旋转 Sprite

C# Json序列化: Multiple variables as array

c# - 如何从列表中删除相似的字符串?

c# - 在 Dynamic CRM Online 中使用 SpreadsheetGear 2012 库

.net - 在 SQL Server 上执行用户定义函数时出现 System.Security.HostProtectionException

c# - ASP.NET Core 和 Visual Studio 中的模型类

c# - 具有流畅验证 ASP.NET Core WebApi 的正则表达式验证