c# - C# 中如何知道给定变量是集合而不是简单项?

标签 c#

假设我有这个方法:

public void DoSomething(object parameter)

因为它接受 object作为输入、数组和列表以及 IEnumerable<T>可以传递给它。

我想检查类型并确保它是单个对象,而不是对象集合。

我可以分别检查每个集合的可能性,但是有没有更好的方法来检查它?

最佳答案

注释已引用此内容,但您可以检查该项目是否是 ICollection 或 IEnumerable。

if(parameter is IEnumerable enumerable)
{
 // You can access the non-generic list with enumerable
}

请注意,字符串也可以实现此功能。因此,如果您不想要该特定类型,您可以添加 and is not string到声明。但还要记住,您可以创建自己的类型来实现 IEnumerable,然后它也不会被接受。

我看到您在评论中引用了 javascript。 Javascript,据我所知,只有数组类型。 C# 有多种“列表”类型,其中很大一部分是 IEnumerable,它允许您枚举项目列表。无论是列表、队列、堆栈、数组等都没关系。

您还可以检查ICollection ,或类似 ICollection<object>IEnumerable<object> .

我主要是重复评论中链接答案的答案:Check if Object is Dictionary or List

不过,这样做是一个不好的做法。我感觉这是一个https://xyproblem.info/ ;最好向我们解释一下您为什么要这样做,也许我们可以解决导致您需要此代码的问题。

如果此答案对您没有帮助,请解释原因,以便我们可以更具体。

关于c# - C# 中如何知道给定变量是集合而不是简单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72824432/

相关文章:

C# 命名空间别名 - 有什么意义?

c# - MVC 发送对象列表

C#继承帮助

c# - 如何确定矩形的哪一边与圆碰撞

c# - 简单的JSON反序列化

使用 Oracle .NET 提供程序的 C# 服务变得越来越慢

c# - OpenFileDialog 中的多个文件扩展名

c# - 为azure函数设置不同的计时器属性

c# - 从 SqlDataReader 写入多个文件

c# - C#中的多维数组访问性能