这很好:

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).如果要判断给定类型是类型本身还是子类(或接口),则应使用Type.IsAssignableFrom():

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

.net相关问答推荐

.NET Core 中的微服务

是否必须使用 Visual Studio 预览才能使用 MAUI?

双精度的 C++ 和 C# 十六进制值之间的差异

MongoDB GridFs with C#,如何存储图片等文件?

在 WP7 中将 List 转换为 ObservableCollection

调整小数精度,.net

为什么这个多态 C# 代码会打印它的功能?

NonSerialized 属性

为什么 Any() 不适用于 c# null 对象

防止对话框在按钮的单击事件处理程序中关闭

指定的版本字符串不符合要求的格式 - major[.minor[.build[.revision]]]

如何以编程方式 Select ListView 中的项目?

处理序列没有元素异常

如何将枚举值序列化为 int?

我可以在没有两个查询的情况下通过布尔标准将 IEnumerable 一分为二吗?

.Net 中 AOP 的最佳实现是什么?

如何获得 Bin 路径?

无法加载文件或程序集Antlr3.Runtime (1)或其依赖项之一

判断对象列表是否包含具有特定值的属性

铸造:(NewType)与对象作为NewType